Roadmap — every feature in one place
One table per area. Every item has an ID so commits and conversations can refer to it (F-FAV-02). Status: ✅ live · 🚧 built, needs a setup step · 📋 planned · 💡 idea, needs a decision
How to use: when a new idea comes up, add a row here first (💡). When work starts, link the commit. Nothing lives only in chat.
Setup steps waiting on the owner
| ID | Step | Why it is blocked | Unblocks |
|---|---|---|---|
| OPS-01 | Create a Google OAuth Client ID for artlove365.com, put it in GOOGLE_CLIENT_ID (workers/api/wrangler.jsonc) | needs the owner's Google Cloud account | F-ACC-01 sign-in, F-FAV-03 sync |
| OPS-02 | Onboard artlove365.com in Cloudflare Email Service → Email Sending | adds DNS records to the zone | F-MAIL-01 emails reach customers |
| OPS-03 | Set ADMIN_TOKEN (npx wrangler secret put ADMIN_TOKEN in workers/api) | secret, owner only | studio /admin, SEO stats |
| OPS-04 | Verify the domain in Google Search Console + Bing Webmaster, submit /sitemap.xml | owner's Google/Microsoft accounts | F-SEO-01 |
| OPS-06 | Create the 7 social accounts and sign in to them in Chrome | Claude may not create accounts or enter passwords | F-MKT-03 posting |
| OPS-07 | Provide the 50 commission photos (customer consent) into content/showcase/ | only the owner has them | F-TRU-04 |
| OPS-05 | Stripe account + STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | owner decision, later | F-PAY-02 real payments |
Catalog & discovery
| ID | Feature | Status |
|---|---|---|
| F-CAT-01 | Gallery with search (any language) and pagination | ✅ |
| F-CAT-02 | Artist pages: portrait, life story (origins, life, style, anecdotes, legacy), related artists, paginated works | ✅ |
| F-CAT-10 | Every public artist has ≥ 10 paintings (new artists enter with a block of 10) | ✅ |
| F-CAT-03 | Browse by movement, museum, subject, genre | ✅ |
| F-CAT-04 | Wikidata ingest → daily publishing of ~277k public-domain paintings | ✅ (pipeline) |
| F-CAT-05 | Browse by color (16 swatches, for decor matching) | 📋 needs dominant-color extraction per image |
| F-CAT-06 | Browse by nationality, century, female artists | 📋 data already in Wikidata |
| F-CAT-07 | "500 most popular" + bestseller list | 📋 priority score exists |
| F-CAT-08 | Curated collections (Old Masters, Victorian, Famous portraits…) | 💡 |
| F-CAT-09 | Filters on listings: orientation (portrait/landscape/square), size | 📋 aspect stored |
Artwork page experience ("make them fall in love")
| ID | Feature | Status |
|---|---|---|
| F-ART-01 | Immersive hero: framed painting on an ambient backdrop made from the painting | ✅ |
| F-ART-02 | Full-screen viewer: zoom 1–8× (wheel, pinch, keys), pan, high-resolution file | ✅ |
| F-ART-03 | Story text from real facts + details card with linked museum/movement/subjects | ✅ |
| F-ART-04 | Share (native share sheet / copy link) | ✅ |
| F-ART-05 | More by the same artist | ✅ |
| F-ART-06 | No ordering on the artwork page (owner's direction 2026-10-04) | ✅ |
| F-ART-07 | "View in a room": painting on room photos, wall-colour picker, true scale | 📋 high delight, M |
| F-ART-08 | "Similar paintings" across artists (same movement + subjects) | 📋 |
| F-ART-09 | Curated stories for the top 500 works (human-written) | 📋 = F-SEO-10 |
| F-ART-11 | Long-form story per painting: history, what to look for, meaning, legacy, did-you-know, sources | 🚧 written in Claude sessions in batches, EN + VI first (stories) |
| F-ART-14 | Stories in es, fr, de, ja | 📋 after EN + VI |
| F-ART-12 | "About the artist" card with portrait, linking to the artist's life story | ✅ |
| F-ART-13 | "Paintings by related artists" (influence, teacher/student, same movement) | ✅ |
| F-ART-10 | Swipe between related works on mobile | 💡 |
Favorites & accounts
| ID | Feature | Status |
|---|---|---|
| F-FAV-01 | Heart on every card and artwork page, with burst animation; count in header | ✅ |
| F-FAV-02 | Favorites stored in the browser (localStorage), synced across tabs | ✅ |
| F-FAV-03 | Signed-in favorites stored in the account; local favorites merged at sign-in | 🚧 waits for OPS-01 |
| F-FAV-04 | /favorites page | ✅ |
| F-ACC-01 | Sign in with Google (ID token verified server-side, HttpOnly session cookie) | 🚧 waits for OPS-01 |
| F-FAV-05 | Share a favorites list ("my wall") as a public link | 💡 |
| F-FAV-06 | Email me when a favorite gets a sale / new size | 💡 needs consent flow |
Ordering & payments
Hidden for now (owner, 2026-10-04: "hide ordering, do it last"). Switch:
ORDERING_ENABLEDinpackages/shared/src/features.ts. While false: no order forms, no "Track order",/ordersand/checkoutare 404, customer guides are not published on docs. The home page links to information pages instead (/how-it-works,/custom).
| ID | Feature | Status |
|---|---|---|
| F-ORD-00 | Information pages: "How we work" and the custom-painting service (process, styles with examples, occasions, photo tips) | ✅ |
| F-ORD-01 | Custom painting from an uploaded photo (style, number of subjects) | 🚧 built, hidden |
| F-ORD-02 | Sketch approval before painting | 🚧 built, hidden |
| F-ORD-03 | Order tracking by code + email, status timeline | 🚧 built, hidden |
| F-ORD-04 | Where reproductions are ordered now that the artwork page has no order form | 💡 owner decision: e.g. a separate /order/{slug} page reached from favorites. The customer guide (/guide/ordering) still describes the old flow and must be updated with the decision. |
| F-ORD-05 | Photo of the finished painting before shipping, approve/revise | 📋 competitor feature, S–M |
| F-ORD-06 | "Paint any painting, any size" quote request | 📋 S |
| F-ORD-07 | Portrait price calculator page | 📋 S |
| F-ORD-08 | Portrait options: background, merge photos, medium (oil/acrylic/charcoal) | 📋 |
| F-PAY-01 | Demo checkout screens (card, PayPal, wallets, bank; success/declined) | 🚧 built, hidden |
| F-PAY-02 | Real payments with Stripe Checkout | 🚧 code ready, waits for OPS-05 |
| F-PAY-03 | Gift cards (+15 % bonus from $200) | 📋 |
| F-PAY-04 | Multi-currency display | 📋 |
Trust & marketing
| ID | Feature | Status |
|---|---|---|
| F-MKT-03 | Social channels (FB, IG, TikTok, YouTube, X, Pinterest, LinkedIn) + 3 launch posts | 🚧 posts drafted (plan); waits for OPS-06 |
| F-TRU-04 | Showcase of real commissions on /custom (incl. nail-salon décor), consent required | 🚧 built (how); waits for OPS-07 |
| ID | Feature | Status |
|---|---|---|
| F-TRU-01 | Guarantee + lifetime warranty + certificate of authenticity pages | 📋 S, owner to set the policy |
| F-TRU-02 | Reviews: per-painting stars, testimonials page | 📋 M, only real reviews |
| F-TRU-03 | Portrait landing pages by occasion (wedding, pets, family, children) | 📋 = SEO area I |
| F-MKT-01 | Newsletter + welcome coupon | 📋 needs consent + unsubscribe |
| F-MKT-02 | Unboxing-video reward | 💡 |
SEO
| ID | Feature | Status |
|---|---|---|
| F-SEO-01 | Search Console + Bing verified, sitemap submitted | 🚧 OPS-04 |
| F-SEO-02 | Edge-rendered HTML (title, meta, canonical, hreflang ×6, OG, JSON-LD, content) | ✅ |
| F-SEO-03 | Sharded sitemaps with hreflang + lastmod | ✅ |
| F-SEO-04 | Daily publisher with LLM title translation + IndexNow | ✅ |
| F-SEO-05 | Daily Wikidata ingest keeping the queue full | ✅ |
| F-SEO-06 | Real 404s, noindex on personal pages, thin-page guard | ✅ |
| F-SEO-07 | Images on R2 + image resizing (stop hot-linking Wikimedia) | 📋 before traffic grows |
| F-SEO-08 | Combination pages (artist × subject, movement × subject, museum × artist) | 📋 phase 2 |
| F-SEO-09 | Journal (art-history articles) | 📋 phase 3 |
| F-SEO-10 | Human-written stories for the top 500 works | 📋 |
| F-SEO-11 | Monthly translation spot-check | 📋 quality |
| F-SEO-12 | FTS5 search index past ~50k works | 📋 |
| F-SEO-13 | SEO growth dashboard in /admin (reads /v1/admin/seo/stats) | 📋 S |