6.6 KiB
Business Case
Metadata
| Key | Value |
|---|---|
| ID | BC-001 |
| CrossReference | |
| Language | en |
| Domain | it |
Version History
| Date | Status | Author | Reviewer | Change | Commit |
|---|---|---|---|---|---|
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version Accepted after review (RC-001 Go) |
f9765fd |
Executive Summary
Online prices on Amazon change often. This project builds a small Python bot that reads a product page, extracts the title and the price, and sends an e-mail through the Simple Mail Transfer Protocol (SMTP) when the price drops below a target. It is the Day 47 assignment of the Udemy course "100 Days of Code: The Complete Python Pro Bootcamp", built step by step: scrape a static practice page, send the alert, add request headers, then try the live Amazon page.
Methodological and Standards Foundation
Planning follows the SQA and QC framework mounted at framework/ (plan first, review each artifact against its quality control (QC) checklist). Quality is described with the International Organization for Standardization and International Electrotechnical Commission standard ISO/IEC 25010:2023 characteristics. Code follows the coding-conventions and clean-architecture skills.
Problem Statement
Checking a product price by hand every day costs time, and a short price drop is easy to miss. The course participant also needs a worked, runnable solution to compare with the course material.
Business Opportunity
A bot that checks the price on its own and sends an alert lets the participant buy at the right moment. As a public repository it also gives other course participants and visitors a readable example.
Objectives
- Extract the product title and price as a
floatfrom the practice page with BeautifulSoup. - Send an e-mail with the title, the price and the buy link when the price is below the target.
- Keep the SMTP address, e-mail address and password in a
.envfile, outside the source code. - Send browser-like request headers (
User-Agent,Accept-Language, and the rest of the course set). - Try the same code on the live Amazon page and document what happens.
- Publish the repository with description, topics, README and a wiki in English, Danish and Bahasa Malaysia, with a screenshot for each lecture step.
Scope
In Scope
- Python 3.13 or newer,
venv,pyproject.toml,pytest,constants.py, Doxygen comments andDoxyfile. - The four lecture steps, each delivered by its own branch and pull request.
- README from the framework template and a three-language wiki explaining what each step teaches.
Out of Scope
- Scheduling the bot to run daily.
- Solving Amazon CAPTCHAs (Completely Automated Public Turing tests, the robot-check pages) or evading bot detection.
- A user interface or a database.
- Importing, testing or committing the personal
.envof the repository owner.
Expected Benefits
Tangible Benefits
- A runnable solution for the four lecture steps with tests.
- A documented repository (README, wiki, screenshots) that others can follow.
Intangible Benefits
- Practice with scraping, SMTP, environment variables and request headers.
- A clear example of plan-first work for course participants.
Strategic Alignment
The project supports the participant's learning goal in the 100 Days of Code course and the public portfolio of the Tirsvad-Udemy-100_days_of_code organisation.
Success Criteria
| # | Criterion | Target | Measure |
|---|---|---|---|
| 1 | Price extracted from the practice page | 99.99 as a float |
Unit test with a saved copy of the page |
| 2 | Alert decision | E-mail text built only when price is below target | Unit tests for below, equal and above |
| 3 | Secrets outside the code | No credential in any tracked file | .env is ignored; search of the repository finds none |
| 4 | Test suite | All tests pass without network access | python -m pytest exits 0 |
| 5 | Documentation | README, wiki in en, da, ms, one screenshot per step |
Files exist and are linked |
| 6 | Repository metadata | Description and at least five topics set on the host | Read back from the host API |
Risks
| Risk | Impact | Mitigation |
|---|---|---|
| Amazon returns a robot-check page (CAPTCHA) or changes its HTML | The live step does not return a price | The live step is documented as best effort; the static page is the tested baseline |
| A token or password is committed | Credential leak | .env in .gitignore; tokens are read from .env only for repository set-up and never copied into the project |
| The practice page changes | A test breaks | Tests use a saved copy of the page |
| Sending real e-mail by accident | Unwanted mail | Tests mock SMTP; the sender is called only from main |
Assumptions
- The Product Owner is S01 and reviews every step; S01 can be reached in chat.
- Gitea (the git host) at
git.tirsystem.comhosts the repository; a Gitea token is in.env. - The practice page
https://appbrewery.github.io/instant_pot/stays available.
Constraints
- Python 3.13 or newer; virtual environment
.venv. - Runtime dependencies are only the ones needed:
requests,beautifulsoup4,python-dotenv. - Layout
src/,tests/,docs/; constants inconstants.py. - One branch and pull request per milestone.
- No GUI is involved, so no GUI test environment is needed.
Cost–Benefit Assessment
| Costs | Benefits |
|---|---|
| A few hours of the participant's time; no licence or hosting cost | A working, tested, documented example and a reusable price alert |
The assessment is qualitative on purpose: this is a learning project with no revenue and no budget, so a monetary return on investment (ROI) would be invented; the only cost is the participant's time, and the benefit is the learning and the reusable repository.
Stakeholders
| Stakeholder ID (SA) | Interest in this project |
|---|---|
| S01 | Product Owner, developer and reviewer; wants a working solution and a clean repository |
| S02 | Readable, runnable code with the assignment's function names, and README run instructions |
| S03 | A clear description, topics and README, and no runtime dependencies beyond the necessary |
Recommendation
Proceed — the scope is small, the cost is low and every objective is testable.