Project Management Plan and Delivery Record
Scope, Work Breakdown, Milestones, Governance and Lessons Learned
ICICI Direct • Interactive Brokers • Revolut
Figure 1. Delivered central dashboard and portfolio entry points.
| Project status The project reached an operational personal-use baseline with three broker workflows, automated cached pricing, secure uploads, one-click IBKR snapshot control, schedules and user documentation. |
|---|
1. Project charter
| Item | Definition |
|---|---|
| Purpose | Consolidate personal portfolio visibility across ICICI Direct, IBKR and Revolut. |
| Business owner | Portfolio owner / administrator. |
| Delivery approach | Incremental build-and-test with immediate browser and terminal validation. |
| Primary platform | Oracle Ubuntu web application with local Windows IBKR integration. |
| Success definition | Usable dashboards, repeatable holdings updates, cached daily prices, secure secrets and documented operations. |
2. Work breakdown structure
| WBS | Workstream | Deliverables |
|---|---|---|
| 1.0 | Foundation | Oracle VM, Nginx, HTTPS, dashboard home, PM2/Flask |
| 2.0 | ICICI Direct | Breeze credentials/session, holdings/funds APIs, token update pages |
| 3.0 | IBKR snapshot | TWS exporter, JSON snapshot, dashboard and symbol mappings |
| 4.0 | Revolut ingestion | Statement analysis, FIFO processor, secure upload, redirect and dashboard |
| 5.0 | External pricing | Twelve Data/Alpha Vantage tests, mappings, caches, P/L calculations |
| 6.0 | Automation | Cron schedules, logging and ownership fixes |
| 7.0 | IBKR remote control | Oracle job API, Nginx agent route, Windows polling agent, dashboard control |
| 8.0 | Quality/documentation | Defect fixes, test completion, user manual and design documents |
3. Milestone delivery record
| Milestone | Outcome | Status |
|---|---|---|
| Central portfolio hub | Main dashboard cards for all portfolio functions. | Complete |
| ICICI Breeze integration | Portfolio APIs and token renewal workflow. | Complete |
| IBKR dashboard baseline | TWS snapshot and portfolio visualisation. | Complete |
| Revolut dashboard baseline | Full-history reconstruction and 28 confirmed holdings. | Complete |
| Revolut secure upload | Validated upload with automatic return to dashboard. | Complete |
| Revolut daily pricing | Cached pricing/FX and cron at 22:30 UTC weekdays. | Complete |
| IBKR one-click snapshot | TWS Windows agent and dashboard-triggered refresh. | Complete |
| IBKR daily pricing | External/fallback pricing and cron at 22:40 UTC weekdays. | Complete |
| Operational documentation | Daily user manual. | Complete |
| Project documentation suite | Business, HLD, LLD, test and PM documents. | This delivery |
4. Delivery method
- Decompose each objective into a small observable step.
- Back up working files before structural changes.
- Validate syntax/configuration before restart or publication.
- Use manual tests and browser screenshots after each integration.
- Fix production issues immediately and preserve last-known-good snapshots.
- Promote working manual flow to automation only after successful test.
5. Roles and responsibilities
| Role | Responsible for |
|---|---|
| Portfolio owner / administrator | Credentials, brokerage logins, admin PIN, source exports, acceptance and daily operation. |
| Solution assistant / implementer | Design guidance, scripts, documentation, defect diagnosis and implementation instructions. |
| Oracle platform | Hosting, scheduling, storage, logs and API orchestration. |
| Windows agent host | TWS runtime, local export dependency and secure outbound communication. |
| External providers | Broker APIs and market-data services subject to their own availability/limits. |
6. Governance and change control
- Keep dated backups before changes to Nginx, Flask, dashboards, processors and snapshots.
- Validate JSON with json.tool and Python modules with py_compile.
- Run nginx -t before reload.
- Use PM2 restart only after syntax passes.
- Record scheduler commands in crontab and redirect output to logs.
- Treat symbol-map changes as controlled configuration updates and test each symbol before enabling.
7. Risk register
| Risk | Probability | Impact | Mitigation |
|---|---|---|---|
| Market-data quota/coverage | Medium | Medium | Split providers, cached values, pacing, fallbacks and Pending status. |
| Expired Breeze session | High | Medium | Visible login/token cards and documented renewal. |
| TWS/agent unavailable | Medium | Medium | Queued status, agent on multiple laptops, keep old snapshot. |
| File-format change from Revolut | Medium | High | Required-column validation, backups and fail-safe publication. |
| Secret exposure | Low/Medium | High | Private .env/config, rotation, no browser keys, restricted permissions. |
| Cron failure | Low/Medium | Medium | Per-job logs, manual script fallback and cache timestamps. |
| Corporate actions | Medium | High | Explicit split/merger logic and reconciliation tests. |
| Single-server dependency | Medium | High | Backups; future VM/image restore procedure. |
8. Operational service model
| Service | Routine | Owner action |
|---|---|---|
| ICICI holdings | On-demand with current session | Renew token when expired. |
| IBKR holdings/account | On-demand | Log in TWS, start agent, click refresh. |
| IBKR prices | 22:40 UTC weekdays | Normally none; review log if stale. |
| Revolut holdings | On-demand after transactions | Upload full account CSV and optional P&L CSV. |
| Revolut prices | 22:30 UTC weekdays | Normally none; review Pending mappings/log if needed. |
9. Quality plan
- Functional verification of every user-visible workflow.
- Negative tests for wrong files, invalid auth and unavailable agents.
- Data reconciliation of holding counts and corporate actions.
- Error-path verification that old snapshots/caches remain usable.
- Visual inspection of cards, tables, status text and charts.
- Security checks that secrets are excluded from public files.
10. Communication and reporting
| Artifact | Audience | Cadence / trigger |
|---|---|---|
| Dashboard status message | Portfolio owner | Every refresh/upload. |
| Cron log | Administrator | After first unattended run and on stale data. |
| Snapshot/cache timestamp | Portfolio owner | Visible/checkable during normal use. |
| User manual | Portfolio owner | Reference when operating or troubleshooting. |
| Design/test documents | Maintainer | On major architecture or workflow change. |
11. Lessons learned
- Provider call allowance is different from exchange coverage.
- Keep holdings and pricing refreshes separate.
- Use exact terminal context: Windows PowerShell and Ubuntu commands are not interchangeable.
- Generate files and then validate permissions in the target web directory.
- Corporate actions need explicit negative as well as positive quantity handling.
- Machine endpoints behind website authentication may require narrow routing exceptions plus application-token security.
- Full-history file rebuilds are simpler and safer than incremental reconciliation at personal scale.
12. Next-phase backlog
- Resolve unmapped Revolut symbols.
- Add automated health/status cards for cron freshness and agent availability.
- Add dashboard links to operational manuals and reports.
- Implement retention policy and verified restore procedure.
- Evaluate a database if transaction history, analytics or multi-user access expands.
- Consider paid market-data plan only if freshness, coverage or quota becomes a material issue.
References
- Interactive Brokers API home: https://www.interactivebrokers.com/campus/ibkr-api-page/ibkr-api-home/
- Interactive Brokers TWS API introduction: https://interactivebrokers.github.io/tws-api/introduction.html
- Interactive Brokers TWS API connectivity: https://interactivebrokers.github.io/tws-api/connection.html
- Twelve Data pricing: https://twelvedata.com/pricing
- Alpha Vantage support and limits: https://www.alphavantage.co/support/
- Alpha Vantage API documentation: https://www.alphavantage.co/documentation/
- Ubuntu CronHowto: https://help.ubuntu.com/community/CronHowto