98 lines
4.6 KiB
Markdown
98 lines
4.6 KiB
Markdown
# Project Plan
|
|
|
|
## Metadata
|
|
| Key | Value |
|
|
| --- | --- |
|
|
| ID | PP-001 |
|
|
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005] |
|
|
| Language | en |
|
|
| Domain | it |
|
|
|
|
## Version History
|
|
| Date | Status | Author | Reviewer | Change | Commit |
|
|
| --- | --- | --- | --- | --- | --- |
|
|
| 2026-10-24 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [c5a6ed5] |
|
|
|
|
---
|
|
|
|
## Purpose
|
|
|
|
This plan schedules the five phases that deliver the Day 40 flight club (see [BC-001]) in a two-week window. One branch and one pull request per milestone keep track of the steps.
|
|
|
|
## Planning Assumptions
|
|
|
|
- The plan starts 2026-10-24 and ends by 2026-11-07.
|
|
- Each phase ends in a pull request that closes its issues; the Product Owner is S01 ([SA-001]).
|
|
- Autonomous mode: after the user accepts this plan, the AI creates, reviews as stand-in for S01, commits and merges each phase.
|
|
- Tests never use the real `.env`, the network, SMTP or the WhatsApp session.
|
|
|
|
## Gateway Schedule
|
|
|
|
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
|
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
| Baseline and project setup | [MIL-001] | 2026-10-24 to 2026-10-26 | 2026-10-26 | S01 | none | Project skeleton, Day 39 code base, CI, repository metadata | |
|
|
| Flight data and indirect search | [MIL-002] | 2026-10-26 to 2026-10-29 | 2026-10-29 | S01 | none | FlightData.stops, check_flights with is_direct, indirect fallback in main | |
|
|
| Customer emails | [MIL-003] | 2026-10-29 to 2026-10-31 | 2026-10-31 | S01 | none | DataManager reads the users sheet and all settings in __init__ | |
|
|
| Email notifications and main program | [MIL-004] | 2026-10-31 to 2026-11-04 | 2026-11-04 | S01 | none | NotificationManager.send_emails and the final main flow | |
|
|
| Documentation and wiki | [MIL-005] | 2026-11-04 to 2026-11-07 | 2026-11-07 | S01 | none | README, wiki en/da/ms, screenshots | |
|
|
|
|
```plantuml
|
|
@startgantt
|
|
Project starts 2026-10-24
|
|
[Baseline and project setup] starts 2026-10-24 and ends 2026-10-26
|
|
[Flight data and indirect search] starts 2026-10-26 and ends 2026-10-29
|
|
[Customer emails] starts 2026-10-29 and ends 2026-10-31
|
|
[Email notifications and main program] starts 2026-10-31 and ends 2026-11-04
|
|
[Documentation and wiki] starts 2026-11-04 and ends 2026-11-07
|
|
[MIL-001 Go/No-Go] happens 2026-10-26
|
|
[MIL-002 Go/No-Go] happens 2026-10-29
|
|
[MIL-003 Go/No-Go] happens 2026-10-31
|
|
[MIL-004 Go/No-Go] happens 2026-11-04
|
|
[MIL-005 Go/No-Go] happens 2026-11-07
|
|
@endgantt
|
|
```
|
|
|
|
## Scope Coverage
|
|
|
|
| Business Case scope item | Gateway |
|
|
| --- | --- |
|
|
| Day 39 code carried over, pyproject, constants, .gitignore, Doxyfile, venv | [MIL-001] |
|
|
| CI workflows, repository description and topics | [MIL-001] |
|
|
| FlightData stops, check_flights with is_direct, indirect fallback | [MIL-002] |
|
|
| DataManager.get_customer_emails and settings in __init__ | [MIL-003] |
|
|
| NotificationManager.send_emails, direct and stopover messages, main.py | [MIL-004] |
|
|
| README, wiki in en/da/ms, screenshots | [MIL-005] |
|
|
|
|
## Dependencies
|
|
|
|
```
|
|
MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005
|
|
```
|
|
|
|
A No-Go on a phase moves every later date by the rework time.
|
|
|
|
## Plan Risks
|
|
|
|
| Risk | Impact | Mitigation |
|
|
| --- | --- | --- |
|
|
| CI workflows need changes or a runner the host lacks | MIL-001 slips | Install only fitting workflows; stop and report after three failed fixes |
|
|
| Screenshots cannot be captured without real data | MIL-005 slips | Use mock data and a test run only |
|
|
| SMTP values are missing from the local `.env` | Real mails cannot be sent | Tests use fakes; the participant adds the values before a real run |
|
|
|
|
## Open Issues
|
|
|
|
- The local `.env` has no SMTP address, email address or app password, and no "users" sheet endpoint; they are needed only for a real run, not for the build or the tests.
|
|
- The users sheet column names are assumed to be `firstName`, `lastName` and `email` (Sheety camel-cases the Google Form headings); the participant can correct them before acceptance.
|
|
- The lesson's starter zip uses Twilio; this project keeps the Day 39 `pywhatkit` WhatsApp delivery instead, as the Business Case records.
|
|
|
|
---
|
|
|
|
[BC-001]: ./business-case.md
|
|
[SA-001]: ./stakeholder-analysis.md
|
|
[MIL-001]: ./milestones/mil-001-baseline-and-setup.md
|
|
[MIL-002]: ./milestones/mil-002-flight-data-and-indirect-search.md
|
|
[MIL-003]: ./milestones/mil-003-customer-emails.md
|
|
[MIL-004]: ./milestones/mil-004-email-notifications-and-main.md
|
|
[MIL-005]: ./milestones/mil-005-documentation-and-wiki.md
|
|
[c5a6ed5]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/040-personal-flight-club/commit/c5a6ed5985f76d8836f763acc5638053a39157f2
|