Skip to content

Mockup - #1

Open
aruship4 wants to merge 75 commits into
mainfrom
mockup
Open

Mockup#1
aruship4 wants to merge 75 commits into
mainfrom
mockup

Conversation

@aruship4

Copy link
Copy Markdown
Collaborator

No description provided.

APRILjcc and others added 17 commits June 23, 2026 15:15
--html-dir given as a relative path crashed filepath.relative_to(BASE_DIR)
(BASE_DIR is absolute), silently producing an empty prices CSV. Resolve the
path first and fall back to the raw string.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 13-recent-manifest.py: select recent-window snapshots (>=2 quarters, anchored
  2024Q3, >=1 snapshot in trailing 12mo), 7 categories.
- 14-recent-ipi.py: matched-model index (Jevons elementary per category,
  review-weighted geometric composite), quarterly + monthly, trailing-12mo headline.
- run-recent-pipeline.sh: idempotent driver (download retry -> extract -> build).
- gitignore: exclude html-recent/ raw HTML (22GB) and transient .out logs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
15,150/15,309 snapshots (99%), 100% price extraction across 7 categories.
Composite IPI flat over the past year (2025Q1->2026Q1: -0.3%); video -11.6%,
coding -6.8%, writing -6.6%, design +2.1%. Includes per-category indices and
volume-proxy weights for client-side recompute.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- code/15-build-site-data.py: reuse step 14's monthly build to emit
  per-category monthly index -> site/data.json (2.2 KB, trailing 12mo,
  rebased to window-start=100).
- site/index.html + site/ipi.js: category checklist drives live in-browser
  composite recompute (matches pipeline's exp(Sum w.ln/Sum w)).
- Verified: client recompute over all categories reproduces composite_all.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Page wasn't working and the user is building their own site. Removed
site/index.html, site/ipi.js, scripts/deploy-site.sh and deleted the
gh-pages branch. Kept code/15-build-site-data.py + site/data.json as the
data layer for the user's own frontend.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rebuilt CSRankings-style site now hand-rolls the trend chart and
sparklines as inline SVG — no Plotly/CDN. Validated: JS syntax OK,
data.json contract complete, client composite reproduces composite_all
(headline -2.1% trailing 12mo). Adds deploy-site.sh redeploy helper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ting

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Serve the IPI frontend from /docs (branch mode) instead of the site/
subfolder, which Pages branch mode cannot serve. Drop the Actions
workflow; update the data-build script output path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Self-contained faq.html (no external libs): explains the purpose of the
index and documents the exact formulas — price relatives, chained Jevons
category index, weighted-geometric-mean composite, headline 12mo change,
and review-based weights — with CSS-rendered math. Cross-linked from the
main index header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages June 30, 2026 18:53 — with GitHub Pages Inactive
Polished, still fully self-contained (no external libs/CDN): Inter/system
font stack, soft canvas with white rounded cards + subtle shadows, indigo
accent, inline-SVG logo + favicon, pill basket toggles, refined table and
tooltip, responsive tweaks. FAQ restyled to match (TOC card, paper card,
boxed formulas). All JS hooks and the data contract are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages June 30, 2026 19:40 — with GitHub Pages Inactive
…ection

- index.html: add full-sentence IPI definition directly beneath the page title
- index.html: lay out trend chart (left) and category-selection table (right)
  side by side via CSS grid, collapsing to stacked below 900px; widen wrap
- faq.html: matching aesthetic refresh

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages June 30, 2026 20:29 — with GitHub Pages Inactive
- ipi.js: significantMoves() flags MoM moves past 0.8% plus the biggest
  rise/drop; drawChart overlays a green/red segment + labeled % on the
  composite line, recomputed live as categories are toggled
- index.html: legend caption under the chart (green=rise, red=drop)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages June 30, 2026 20:53 — with GitHub Pages Inactive
@haojian
haojian temporarily deployed to github-pages July 13, 2026 23:54 — with GitHub Pages Inactive
Clicking a quarter now lists the composite first, then all seven categories in
alphabetical order, each with its index level (pts) at that quarter. Drops the
repeated quarter label (already shown in the dropdown).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 00:02 — with GitHub Pages Inactive
…0 rebuild

- ipi.js: quarter-click readout lists composite then all 7 categories (A-Z)
- index.html: "How to read the units" header explainer (+ .units CSS)
- 18-build: TOP_N 25 -> 100; rebuilt data.json/freelancers.json (592 sellers)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 00:12 — with GitHub Pages Inactive
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 00:26 — with GitHub Pages Inactive
haojian and others added 2 commits July 14, 2026 00:31
Replace the three stacked intro paragraphs (mission/def/units) with a
two-column grid of boxes — 'What this is' and 'How to read it' — with
trimmed text to reduce the wall of text at the top.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…bands

(A) code/20-validate-extraction.py: audits parsed prices vs independent signals
    (og:title price, presence-in-HTML, pipeline re-parse). Displayed window
    (2020Q1+) validates 100%; failures confined to pre-2017 old_json era.
(B) 19-tpd: per-quarter regression SE (splu on X'X) -> *-tpd-se.csv; 18-build
    emits index_tpd_se/composite_tpd_se; ipi.js draws a shaded 95% band on the
    fixed-effects chart (composite ±3.2%, translation ±34% — thin cats read wide).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 00:39 — with GitHub Pages Inactive
Adds a note under the fixed-effects chart: a random 300-snapshot spot-check
found 100% of displayed-era (2020Q1+) prices match an independent on-page
price (none hallucinated, all reproducible).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 01:08 — with GitHub Pages Inactive
- Independent quarter picker (#qpick2) and readout (#qreadout2) on the
  fixed-effects chart; own pinned state (pinnedFx) so it's separate from the
  main chart. Readout lists composite first, then all 7 categories (A-Z),
  reading the fixed-effects series (DATA.index_tpd).
- Remove "Corrected" from the fixed-effects chart y-axis label.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 01:17 — with GitHub Pages Inactive
…note under chart

- #qpick2 now shares #qpick's rounded styling (was rendering with sharp default corners)
- move the "Prices validated" note directly under the fixed-effects chart, above its dropdown

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 01:33 — with GitHub Pages Inactive
- Replace the paragraph subtitle with bullets: what the chart is, the shaded
  95% CI band, and a professional data+method validation point.
- Remove the standalone "Prices validated" box; its facts merged into the
  validation bullet.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 01:47 — with GitHub Pages Inactive
New standalone docs/gallery.html + docs/gallery.js: one card per category with
its fixed-effects price-index trend (95% CI band) and a featured real gig's
package-price history from freelancers.json. Featured-gig picker prefers
on-topic gigs (per-category keyword relevance) over longer but cross-tagged
ones, then richest price history. Cards ordered by size of the '20-'26 move.
Adds a Gallery link to the index and FAQ header nav.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 18:31 — with GitHub Pages Inactive
Standalone markdown recap of recent site changes (gallery, confidence
bands, extraction validation, header/chart polish) and the
time-product-dummy fixed-effects index that corrects for irregular
Wayback sampling across gigs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 20:09 — with GitHub Pages Inactive
Add a "Correcting for irregular sampling" step to the "How is the index
calculated?" FAQ, with the two-gig logo example: frequently-captured
gigs reveal the price path's shape, so each rarely-captured gig's change
is spread across the correct quarters instead of piled into the
reappearance quarter.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 14, 2026 20:10 — with GitHub Pages Inactive
The 2026-07-15 decision dropped fixed effects in favour of GEKS-Jevons,
but only the data side had been done: 18-build-site-data-long.py emitted
index_geks/composite_geks/*_geks_se and the rebuilt data.json no longer
carried the index_tpd block, while ipi.js and gallery.js still read
DATA.index_tpd. The second home-page chart was returning early on the
missing key and the gallery had fallen back to the drifting chained
series. This finishes the rewire.

- rename the data contract in ipi.js, gallery.js, index.html and
  gallery.html (index_tpd* -> index_geks*, composite_tpd*, delta_tpd,
  drawChartTPD, #tpdDelta); no tpd references remain under docs/
- replace the user-facing "fixed effects" copy: chart title, the three
  bullets (pairwise comparison over all routes, bootstrap CI,
  PriceIndexCalc validation), tooltip, gallery badge/caption/footer
- rewrite FAQ Step 5 around chain drift, the bilateral Jevons formula
  and GEKS transitivity, in place of the alpha/delta regression
- rewrite method 3.4: the estimator with both equations, sample
  construction and 2020Q1 window rationale, TPD reframed as the
  imputation alternative, dump-price bias tested rather than assumed,
  and the reference validation; five new CITE placeholders
- add code/21-geks-index.py and its four output CSVs
- update tests/method.test.md (R1 rewritten, R2/R3/R4/R7 added, R5/R8
  FAIL, R6 BLOCKED, U2/U3 recorded) and progress.md

Known open items, recorded in the tests rather than fixed here:
translation coverage (15% of quarter pairs have zero overlap, +/-26%
band), the MIN_MATCH=3 sensitivity check, and the 2019Q1-vs-2020Q1 base
period inconsistency in the composite paragraph.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 23, 2026 05:46 — with GitHub Pages Inactive
…ies shown

The headline chart was still DATA.index, the chained-Jevons series the project
replaced on 2026-07-15. It reads design 2020Q1->2026Q1 as 100 -> 304 against 134
for the GEKS-Jevons chart directly beneath it.

Direct matched-pair Jevons (no chaining, no multilateral correction) corroborates
GEKS in every category — design 154 vs 147 GEKS vs 318 chained at 2024Q3 — and on
2024Q3->2026Q1, where coverage is thick, 299-570 matched design gigs give 94-100.
Chained runs 1.6-2.7x high throughout.

- collapse the two chart cards into one; the GEKS series keeps the confidence
  band, the sharpest-QoQ-move highlights and the quarter inspector
- remove drawChartGEKS, pinnedFx, pinQuarterFx, renderInspectorFx and the
  #chart2/#tip2/#qpick2/#qreadout2/#qclear2 markup and CSS
- move the Delta '20-'26 column and its sort key from delta12 to delta_geks
  (design +204.1% -> +34.1%) and the row sparklines to index_geks
- drop gallery.js's silent DATA.index/delta12 fallbacks
- add a hero bullet explaining why a chained index is not used

data.json still carries index/delta12/composite_all for the paper's method
comparison; they are simply no longer plotted.

Also logs TD1: code/12-panel-ipi.py keys within-gig relatives by destination
quarter alone, so a gig's multi-quarter change is applied as a single-quarter
change on top of growth already chained in from gigs observed in between
(22-31% of links span >1 quarter). Fix attempted and reverted — choosing among
the viable constructions moves the paper's peak-composite and chain-drift
figures, so it is a methods decision. tests/method.test.md R9 FAIL.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@haojian
haojian temporarily deployed to github-pages July 27, 2026 04:05 — with GitHub Pages Inactive
haojian and others added 2 commits July 30, 2026 21:57
The index is quoted in dollars and the dollar lost ~27% of its value over
2020Q1-2026Q1, so the nominal series answers "how many dollars does this
gig cost" while the real series answers "how much intelligence work
actually costs" -- the question the project exists to ask. Real is now the
default view, with a Real/Nominal toggle on the hero chart.

Composite 2020Q1->2026Q1: +44.7% nominal -> +14.1% real, against CPI-U
+26.8%. Roughly two-thirds of the nominal rise is the dollar, not the
service. Design -- ~71% of review weight -- goes +34.1% -> +5.8%, i.e.
essentially flat in real terms over six years.

- 23-real-index.py deflates GEKS-Jevons by CPI-U (FRED CPIAUCSL, SA
  primary; CPIAUCNS checked as robustness, max divergence 0.36%), cached
  to data/cpi-u.csv so reruns are offline. BLS published no October 2025
  CPI-U, so that month is linearly interpolated and the quarter flagged.
- 18-build reads the real CSVs through the same chain_category ->
  aligned -> composite_series path as the nominal series, so the two
  differ only by the deflator. No *_real_se block: the deflator carries
  no sampling error, so the existing bootstrap SEs apply to both bases.
- ipi.js routes every index read through idxSrc()/deltaSrc() rather than
  scattered DATA.index_geks references, so the two bases cannot partially
  mix. Nominal view draws CPI-U as a dashed reference line; the real view
  omits it (flat at 100 by construction). Toggle self-hides on older data.
- gallery.js switched to the real series; featured gig package prices
  stay nominal, since those are actual posted dollar amounts.

Also lands 22-confounder-diagnostics.py from 2026-07-29 (reputation
treadmill, pre-AI placebo, entry-price survivorship), whose results the
FAQ limitations now cite.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Q9 was rewritten for the real series in the previous commit, but auditing
the rest of the page turned up four claims that went stale when the
chained series was retired (2026-07-27) and real became the default.

- Q3 quoted the retired chained series: "three or four times their 2020
  level" are delta12 magnitudes (marketing +478%), not anything plotted.
  The real range is +5.8% (design) to +117% (translation). The ordering
  claim was also inverted -- it named translation among the bottom
  categories when it is in fact the highest of the seven. Rewritten with
  the true ordering, plus a paragraph saying plainly that translation
  topping the table is not what an exposure story predicts, and why it
  carries the least weight (thinnest series, widest band, missing
  quarters).
- Q8 presented the chained index as the published one and framed GEKS as
  a correction shown on "the second chart on the home page" -- there has
  been one chart since 2026-07-27. Reframed so GEKS-Jevons + CPI-U
  deflation is stated up front, with steps 1-4 kept as the clearest
  explanation of a matched-model index and labelled not plotted.
- Added Step 6 documenting deflation: I_real = I x CPI_0/CPI_t, why the
  seasonally adjusted series is primary, and why the bootstrap bands are
  identical on both bases. Real was the default view with the calculation
  undocumented.
- Q13 replaced the drift caveat (it described a series no longer shown)
  and added two measured limitations from the confounder diagnostics:
  the reputation treadmill (doubling reviews ~ +7% price, ~40% of
  within-gig growth, and why reviews are a bad control) and survivorship
  (entrants post flat prices 2019-2025 while the matched index climbs).
  Causation bullet moved to the descriptive-first position.
- Q14 names the real three-script build and the PriceIndexCalc check.

docs/GUIDE.md and docs/README.md still document the pre-quarterly data
contract. Q14 links to them, so it now warns readers and points at
data.json as authoritative; the refresh is logged in plans/todo.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants