Skip to content

Commit 261624c

Browse files
docs: standardize README and restructure docs/
README 232 -> 74 lines with an 8-page docs/ folder. Moves the 88-row build index to docs/builds.md and SCRAPER_README.md to docs/scraper.md. Fixes a /blob/ hero URL that never rendered, an index row pointing at the wrong month, and nine links using an inconsistent path form. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TtaJBmFDK3GcSyuhSuZ84R
1 parent 90e4e9a commit 261624c

14 files changed

Lines changed: 558 additions & 196 deletions

File tree

README.md

Lines changed: 38 additions & 196 deletions
Large diffs are not rendered by default.

docs/README.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Maximum PC Builds Archive — Documentation
2+
3+
An archive of the PC builds published in Maximum PC magazine, kept as part lists in three
4+
parallel forms, with a scraper that keeps current prices fresh.
5+
6+
```
7+
Maximum-PC-Builds-Archive/
8+
├── docs/
9+
│ ├── README.md this page
10+
│ ├── builds.md the full build index
11+
│ ├── usage.md the three representations
12+
│ ├── architecture.md how the archive is organised
13+
│ ├── scraper.md the daily price updater
14+
│ ├── faq.md currencies, accuracy, coverage
15+
│ ├── troubleshooting.md stale or missing prices
16+
│ ├── roadmap.md gaps and non-goals
17+
│ └── legal/ privacy policy and terms
18+
├── 2018/ … 2021/ one folder per year, then per month
19+
├── scraper.py the price updater
20+
└── requirements.txt
21+
```
22+
23+
## Pages
24+
25+
- [Build index](./builds.md) — every build, with links to all three forms
26+
- [Usage](./usage.md) — which representation to use, and what each gives you
27+
- [Architecture](./architecture.md) — the folder scheme, the branches, the currencies
28+
- [Scraper](./scraper.md) — the daily price update
29+
- [FAQ](./faq.md) — currencies, price accuracy, coverage
30+
- [Troubleshooting](./troubleshooting.md) — prices not updating, missing builds
31+
- [Roadmap](./roadmap.md) — gaps and non-goals
32+
33+
## Three representations, three currencies
34+
35+
The same build exists three ways, and the currency differs by design:
36+
37+
| Where | Currency | Shows |
38+
|---|---|---|
39+
| PCPartPicker | Any it supports | Current price only |
40+
| Markdown, in this repo | Canadian dollars | Printed **and** current |
41+
| Website, on `gh-pages` | US dollars | Printed **and** current |
42+
43+
Only the last two preserve the original printed price, which is the point of an archive — the
44+
interesting figure is the gap between what a build cost then and what it costs now.
45+
46+
## The prices are moving targets
47+
48+
`scraper.py` runs daily and rewrites the current prices in the Markdown files. So the
49+
repository's history is partly a price series, and any given file is accurate as of its last
50+
successful run rather than as of the magazine issue.

docs/architecture.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Maximum PC Builds Archive — Architecture
2+
3+
## Layout
4+
5+
```
6+
2018/January/{Budget,Mid-Range,Turbo}.md
7+
2018/February/…
8+
9+
2021/October/{AMD Budget, AMD Mid-Range, AMD Turbo, Intel Budget, …}.md
10+
scraper.py
11+
requirements.txt
12+
.github/workflows/update-prices.yml
13+
```
14+
15+
Year, then month, then one file per build tier. The AMD and Intel split appears only in the
16+
years the magazine used it, so the folder shape follows the source rather than imposing a
17+
uniform scheme.
18+
19+
## Two branches, two artefacts
20+
21+
| Branch | Holds |
22+
|---|---|
23+
| `main` | Markdown builds, the scraper, documentation |
24+
| `gh-pages` | The generated website |
25+
26+
The website is a **derived artefact**. The Markdown files are the source of truth, and the
27+
published pages are one rendering of them — which is why the currency can differ between the
28+
two without either being wrong.
29+
30+
## Three representations, deliberately
31+
32+
| Form | Currency | Printed price | Current price |
33+
|---|---|---|---|
34+
| PCPartPicker | Any supported | No | Yes, live |
35+
| Markdown | CAD | Yes | Yes, from the last scrape |
36+
| Website | USD | Yes | Yes, from the last scrape |
37+
38+
PCPartPicker is a live service and cannot carry a historical figure, which is why the archive
39+
keeps its own copies. Losing the printed price would leave nothing to compare against, and the
40+
comparison is the whole point.
41+
42+
The CAD/USD split reflects where each is read rather than an inconsistency.
43+
44+
## Prices are rewritten in place
45+
46+
`scraper.py` runs daily under `update-prices.yml` and edits the current-price column of the
47+
Markdown files, committing the result.
48+
49+
Two consequences:
50+
51+
- **A build file is accurate as of the last successful run**, not as of the issue date.
52+
- **The git history is partly a price series.** Every daily commit records what those parts
53+
cost that day, which is a more interesting dataset than the files themselves and is not
54+
currently surfaced anywhere.
55+
56+
The printed price column is never touched, which is what keeps the archive honest.
57+
58+
## The scraper depends on someone else's markup
59+
60+
Prices come from PCPartPicker, parsed with BeautifulSoup. PCPartPicker aggregates retailers —
61+
the scraper does not visit Newegg, Amazon, or Best Buy itself.
62+
63+
That makes one site the single point of failure for the whole price-updating story, and a
64+
layout change there breaks parsing with no warning. See [Scraper](./scraper.md).
65+
66+
## Provenance
67+
68+
The component selections were published by Maximum PC magazine. This repository records which
69+
parts each build specified and tracks their prices; it does not reproduce the magazine's
70+
articles or reviews.

0 commit comments

Comments
 (0)