Media
Official Instagram import via Meta OAuth
Replace the committed Instagram snapshot with an official API import, scheduled refreshes, R2 copies, and manual curation controls.
A live tracker for what is shipped, what is active, and what is queued next across the Fanful creator platform, agent surfaces, and mobile apps.
GitHub issue labels ยท updated 4:36 AM
Workstream
The fanful.net marketing site, creator admin tools, fan-facing pages, commerce flows, agent-readable routes, and shared APIs that native apps consume.
Roadmap stage
Useful sparks that might become real once a dependency or user need gets sharper.
Media
Replace the committed Instagram snapshot with an official API import, scheduled refreshes, R2 copies, and manual curation controls.
Commerce
Onboard each musician as a connected account, route money directly to artists, and collect a platform fee if Fanful becomes a business.
Roadmap stage
Committed roadmap work that exists, but is not the next thing to pull.
Qa
Parent: 1499 Shared contract: 1500 Web: 1501 iOS: 1502 Android: 1503 Goal Prove feature parity for the Discord/Slackgrade live chat bundle across web, iOS, and Android. Scope Cr...
Live
Goal Bring Fanful text live chat up to Discord/Slackgrade parity across web, iOS, and Android for creator communities. In this issue, "community" means the Fanful community scop...
Commerce
Parents: 925, 926, 534 Native dependents: iOS 925 and Android 926. Define and implement the shared backend contract for creator/admin Stripe Product, Price, tier, and entitlemen...
Media
Mark observed that changing track on one phone was slow to update on another while logged in as the same listener on iPhone and Android. Determine whether Durable Object/realtim...
Admin
Context Mark asked Goal Runner to keep periodically testing the real Fanful multiplayer experience across all available surfaces at the same time: web in Brave iOS through iPhon...
Admin
Motivation Creators need to define membership/support/product tiers once and have those tiers drive access across the website, native apps, realtime rooms, live chat, paid webin...
Admin
Motivation 504 mixes the first lessonbooking slice with later commercial policy work. Keep the first slice focused on fixing the current booking path and basic artist availabili...
Media
Captured from Mark's crossplatform listening feedback in the Codex iOS app session on 20260511. Problem Mark wants two distinct crossdevice behaviors: For one user logged in on ...
Roadmap stage
Committed follow-ups that are queued behind the active work.
No next items right now.
Roadmap stage
Current branches and PRs. These should move as GitHub issue labels change.
No active items right now.
Roadmap stage
Shipped work, newest first, with screenshots where the change is visual.
Qa
Context Android has 1261 as a durable featurepromise parity audit against the public Fanful feature set. The web app has shipped many individual slices, but there is not yet an ...
Live
Parent: 1501 Shared contract: 1500 Goal Add a visible web publisher/admin notification center so artist admins can review creatorappropriate notification events from the web app...
Live
Parent: 1501 Related: 1499 Goal Finish the web UI slice for community custom emoji parity now that the API, storage, reaction persistence, usage analytics, and executable API jo...
Live
Parent: 1501 Shared contract: 1500 Goal Give web listeners an accountlevel notification center for the same reaction, reply, scheduled live show, and donationthanks event catego...
Live
Parent: 1501 Shared contract: 1500 Goal Expose the shared communitychat system emoji reaction set in the web live/community chat UI instead of limiting web listeners to the lega...
Live
Parent: 1501 Shared contract: 1500 Parity parent: 1499 Problem The shared communitychat contract already defines realtime typing presence and native Android/iOS have evidence fo...
Live
Parent: 1499\nContract predecessor: 1500\nBlocks native parity: 1502, 1503\nQA parity: 1504\n\n Problem\n\nPR 1534 / 1500 shipped the shared schema, D1 tables, migration, and ag...
Web
Goal Add platform filters to fanful.net/roadmap so Mark can view the main roadmap at a feature/workstream level instead of digging through noisy GitHub issue lists. Scope Add a ...
Live
Parent: 1499 Depends on shared contract issue: 1500 Goal Add the Discord/Slackgrade live chat capability set to the web app. Scope Show typing indicators such as Rob is typing.....
Commerce
Scope Implement the first shippable web/backend publisher referral scheme. Acceptance criteria D1 schema records publisher referral codes, referredpublisher claims, reward terms...
Admin
Parent: 534 Related platform parent: 1052 Parity driver: 1260 Why The public Fanful feature set now has stronger fanfacing account, shop, lesson, listen, and upload/provenance c...
Admin
Parent: 1052 Shared backend/API dependency shipped: 1186 Parity siblings: iOS 1195 and Android 1204. Add human web/admin controls for membershiptier Stripe Price create/select n...
Admin
Parent: 1052\nNative dependents: iOS 925 and Android 926. Related platform parent: 534.\n\n Why\n\nThe native creator/admin apps need to let Laurel manage membershiptier prices ...
Admin
Parent: 1052 Depends on: 1083 Related: 1058, 925, 926 Why 1083 is adding the confirmed serverowned Stripe Price createandselect wrapper for one lesson/coaching offering through ...
Platform
Context Parent: 1075. Related community shell issue: 560. Fanful's MVP model is one app with fan mode and publisher mode, not one whitelabeled app per artist. Existing community...
Platform
Context Mark clarified the intended MVP product model after the first iOS App Store Connect record was created: Start with one Fanful app, not one whitelabeled app per artist. T...
Commerce
Parent: 504. Motivation The first lessonbooking path already has a dedicated /lessons surface, adminmanaged offerings, and open availability. The homepage support band still sen...
Commerce
Parent: 1052 Unblocks later native write work in 925 and 926. Related tier/entitlement parent: 534. Why The iOS and Android creatorcommerce panels can already read the shared /a...
Admin
Parent/parity context: 921 defined alwayson community channels, and 922/923 need iOS/Android management UI to show membership/entitlement access per channel. That access model i...
Admin
Parent/parity context: 921 clarified the alwayson communitychannel model, while 922 and 923 still need native iOS/Android management parity. Both native issues are blocked on a ...
Commerce
Parent: 928 Context 928 asks for live donations across web, iOS, Android, and admin reporting. Android child 966 covers the native Android Live tab slice. The web can ship a sma...
Media
Mark sees an old darkbackground Now Playing player low on the homepage. The sticky player is now the canonical playback surface, so the legacy embedded player should likely be r...
Auth
Mark questioned whether 'Get Laurel updates' belongs on the homepage when the visitor is already signed in.\n\nAcceptance criteria:\n Audit homepage newsletter/update CTA for si...
Design
Mobile users should not see CmdK or CtrlK shortcut hints because they are irrelevant on phone layouts.\n\nAcceptance criteria:\n Keyboard shortcut hints are hidden on mobile/tou...
Auth
Mark wants 'Alerts' removed from the hamburger menu because alerts/notifications belong as a suboption inside Account.\n\nAcceptance criteria:\n Mobile hamburger menu no longer ...
Platform
Mark clarified that the roadmap is for fanful.net only, not laurelharned.com.\n\nAcceptance criteria:\n laurelharned.com does not expose the public roadmap as a Laurel artistsit...
Design
In Safari/mobile, the hamburger/dropdown menu does not autodismiss when Mark clicks outside it or scrolls/interacts with the page.\n\nAcceptance criteria:\n Menu closes on outsi...
Auth
On the Laurel homepage in Safari/mobile, Mark can still see a lowerpage 'new listener? join / sign in' CTA even when signed in and account is available in the topright navigatio...
Auth
Mark noticed possible duplicate log in / sign up buttons. Native apps should have one clear auth path per context, and every visible auth CTA should work.\n\nAcceptance criteria...
Admin
Admin/native dashboards currently risk showing numbers that are unclear as real vs fake/demo. Mark wants real numbers where available, such as 0 subscribers or /bin/zsh.00 sales...
Admin
During a live stream, listeners should be able to donate/tip in a way that works consistently across web, iOS, and Android while respecting App Store payment policy.\n\nAcceptan...
Admin
When Laurel/admin wants to start a live stream from iOS or Android, the app should offer a simple Go Live Now flow instead of asking for technical stream URL details.\n\nAccepta...
Admin
When Laurel/admin is logged into iOS or Android, the app should not show listener purchase/subscribe CTAs. The artist is not a buyer in her own app context.\n\nAcceptance criter...
Live
Mark clarified that 507 shipped the foundation but the product contract needs to clearly separate two concepts:\n\n1. Alwayson 24/7 community text channels, Slackstyle, such as ...
Admin
Goal Prove the production embeddedroom media path with real RealtimeKit credentials, not just mocked local journeys or Durable Object socket smoke tests. Scope Create or reuse a...
Auth
Parent Part of 873. Scope Add the shared signedin listener displayname update contract that native clients can use without depending on Better Auth internals. Add a server route...
Auth
Summary Manual native crossdevice smoke is blocked because the production magiclink signin endpoint is failing. Android can reach the network and the account form is interactive...
Auth
Context Mark asked for an editprofile path so listeners can change their display name after account creation. This also surfaced during native chat testing because message attri...
Platform
Context PR 426 shipped the first static Fanful competitor matrix at /fanful/competitors and documented that filters/search can come later if the data keeps growing. Goal Make th...
Live
Parent: 505 Related room slices: 523, 524, 839, 844 Production credential blocker: 650 Goal Let a listener, student, or host add a firstparty embedded room to their calendar wit...
Live
Motivation Issue 505 needs iOS and Android to treat embedded rooms as a native platform feature, not only as a web URL handed out by email. The current native contract can read ...
Admin
Motivation Issue 505 needs the first paid lesson/coaching path to stop treating Zoom as the default handoff. The embedded room layer already supports sourceType: lessonbooking, ...
Commerce
Goal Turn a paid artistdomainregistrationintents row from issue 680 into an actual Cloudflare Registrar registration only after a fresh quote check, exactdomain confirmation, pa...
Commerce
Why 680 is a meaty Cloudflare Registrar purchase feature with irreversible billing/registration boundaries and four product surfaces. Track parity as a linked issue family so ea...
Platform
Context\n\nApple App Store Connect and Google Play both need stable public privacy/support URLs before broader TestFlight/Play testing and production submission. The current iOS...
Qa
Context The cloud handoff for 690 could not capture Playwright screenshots because the container lacked browser system dependencies. Local or another capable Codex environment s...
Platform
Context 690 preserves local code for serving Fanful marketing pages from the existing Worker. Production deployment and domain smoke evidence are still separate because the clou...
Qa
Goal Capture durable screenshots and production smoke evidence for the Fanful marketing/comparison surfaces so PRs and postmerge notices are reviewable after branches are delete...
Ops
Goal Deploy the Fanful.net routing changes and verify production behavior on the apex and www hosts. Acceptance checks https://fanful.net/ serves the Fanful marketing page. http...
Commerce
Goal Let a Fanful artist buy an available domain through Fanful using Cloudflare Registrar, charge exactly Cloudflare's cost with no markup, and then let Fanful manage the DNS s...
Auth
Goal Let Fanful artists claim a branded web address before we sell or transfer domains for them. This is the first domain issue because the DNS model affects website routing, cr...
Live
Parent: 505 Followup from 523 / PR 597. Why this exists PR 597 deployed the firstparty embeddedroom RealtimeKit media path, remote D1 migration 0022embeddedroommediaparticipants...
Live
Add low-density reactions, reply context, and scoped mention rendering for community chat without turning the Live tab into a full Discord clone.
Chat affordances
Live
Add creator-configurable slow mode and per-listener rate limits across REST and WebSocket posting, scoped to creator community and channel.
Community slow mode
Admin
Why 511 shipped the firstparty web member idea/upvoting board. This is a meaty product feature, so parity should be tracked as a linked issue family rather than buried inside on...
Live
Context Mark's 20260512 crossplatform design feedback says the listener app should feel social and realtime, with a prominent Live tab, notifications, visible community presence...
Media
Motivation PictureinPicture/background video continuity is now a parity feature family, not one platformonly issue. Android and iOS have shipped native slices, with web still tr...
Live
First slice: expose creator/admin flag, hide, and restore review controls for community notes while keeping flagged/hidden notes out of public reads and realtime updates.
Community note review flow

Live
Link scheduled/live/replay rooms to one persistent community channel so broadcasts, member webinars, and between-stream chat feel like one conversation without duplicating message history.
Broadcast-linked community
Live
Attach Cloudflare Realtime or Calls media sessions to embedded rooms with token minting, WebRTC track exchange, device controls, and operational fallback states.
Media
Context Common Design issue 448 still needs nativedevice Listen Along invite/QR/coscrub evidence. The current code is healthier than before: iOS preflight passes, the iPhone app...
Admin
Scope for this issue Build a firstparty member idea board for Laurel now, shaped as the reusable MusicWebs/Fanful alternative to Canny later. The first shippable slice should le...
Live
Create first-party embedded rooms with host/attendee roles, durable chat, access policies, and a Cloudflare-native media path for lessons, coaching calls, webinars, and private paid sessions.
Media
Mark confirmed that Listen Here / crossdevice playback handoff is impressive when the same track exists on both surfaces, but can become nonsensical when web and native apps hav...
Media
Problem During Common Design 448 smoke on 20260511, an Android emulator host created a production Listen Along invite and a separate web listener was signed in through Better Au...
Qa
Captured from Mark's nativeapp parity directive in the Codex iOS app session on 20260511. Problem Mark explicitly does not want native iOS/Android features to cheat by linking o...
Auth
Captured from Mark's rapid mobile feedback in the Codex iOS app session on 20260511. Problem iPhone and Android settings currently imply email notifications are ON even when ema...
Platform
Goal Create one durable place for notes from other platforms and add an entrepreneurfacing web view that compares Fanful against relevant creator, commerce, course, funnel, and ...
Media
Motivation PR 373 closed 370 by shipping the shared web/backend Listen Along state endpoint. Some docs and one Android listenerfacing/debug string still say realtime coscrub is ...
Media
Motivation Mark asked for thorough crossplatform smoke testing across web, iPhone, and Android using demo listener accounts and the Laurel artist account. The existing issue 288...
Media
Motivation Mark wants Listen Along to be more than an invite/join state: two different listener accounts should be able to keep playback synchronized, and either participant sho...
Media
Motivation Mark feedback from crossdevice playback testing: Listen here handoff is impressive when both surfaces reference the same item, but sync becomes nonsense when web and ...
Media
Motivation Mark feedback from iPhone testing: when Romance Anonimo ended, playback stopped at the end while the large play/pause control still showed pause. He also raised wheth...
Design
Motivation\n\nNext 16 warns during every production build that no longer belongs in the metadata export. The warning repeats for many routes and makes CI output noisier while we...
Commerce
Motivation Mark was explicit: Live, Dates, Shop, Lessons, and Account should be native in iOS/Android, not webview shortcuts. The main exception is Support/Stripe checkout, wher...
Media
Motivation Mark saw truncated native copy like Offline caching requires a signed native manifest... on iPhone track rows. That sounds like internal implementation detail and doe...
Media
Motivation Listen Along needs a web surface as well as native app surfaces: a listener should be able to invite a friend by link, or show a QR code when they are beside each oth...
Auth
Motivation Guest signin/join is currently too buried and too playbackhandoffspecific. Mark wants account entry to be a primary navigation action: on web, the homepage topright C...
Media
Motivation Mark's screenshots show the web player taking over too much of the page when playback is remote or expanded. The bottom mini player remains visible under the expanded...
Media
Motivation Social listening needs a crossdevice contract before native apps can implement it cleanly. A listener should be able to invite another listener to listen along remote...
Qa
Motivation Production /api/roadmap is GitHubbacked, but the server fetch currently requests only perpage=100 from the GitHub Issues API. The roadmap has grown beyond 100 GitHub ...
Design
The shipped roadmap stage headers still feel off in wide Kanban view. Observed from Mark's screenshot: card text briefly appears above the floating stage header while scrolling ...
Admin
Goal\nWhen Laurel signs into iOS or Android, she can create a live room, go live now, schedule a future room, update chat/subscriber settings, and end/cancel live events without...
Admin
Goal\nWhen an owner or Laurel artistadmin signs into iOS or Android, they can manage subscriber and membership state without webadmin handoff for routine support work.\n\n Scope...
Qa
Motivation The live /roadmap page reads GitHub issues and infers a Web/iOS/Android workstream. Newer native issues carry explicit labels like area:iosapp and area:androidapp, bu...
Media
Motivation The web player should not merely be functional; it should feel like the strongest surface. Use Spotifylevel product expectations as a reference for clear hierarchy, c...
Media
Motivation Mark recommended thorough realaccount testing across listener comments, live chat, live creation, and playback sync using demo listener accounts and the Laurel artist...
Admin
Motivation Mark wants iOS and Android to avoid cheating by linking to web for app features. Support/Stripe checkout can link out, but Live, Dates, Shop, Lessons, and artist goli...
Media
Motivation When a track ends, the platform needs a deliberate queue policy. Mark asked whether a next track should autoplay and suggested an adjustable autoplaynext toggle, espe...
Media
Motivation Mark noticed playback sync can become nonsense when web and native apps do not expose the same playlist/catalog order and media identities. Example: one platform has ...
Media
Motivation Current handoff behavior is good for one listener using multiple devices: Listen here claims playback and the other device should stop. Mark wants a separate social m...
Auth
Motivation Mark's nativeapp feedback exposed a shared accountstate problem that web/backend should help solve: email notification state, email verification prompts, push registr...
Design
Followup to 166. The stage headers are now visually distinct and sticky. Add a small polish pass so they feel smoother in use: restrained transitions, hover/focus affordance, an...
Media
Goal Create the durable design source of truth for the Laurel/MusicWebs listener player across web, iOS, and Android so platform work does not drift into three different audio p...

Platform
Add the website/backend account layer for per-category email versus push preferences and native APNs/FCM device-token registration.
Shared notification preference API
Roadmap
Make `/roadmap` separate website/shared-platform, iOS native app, and Android native app work so future branches and agents can stay focused.
Apps
Research native iOS/Android, Kotlin Multiplatform, React Native, Flutter, and PWA options so future Fanful listener apps start from the right architecture.
Native app options
Admin
Goal Design and implement a clearer notification preference model that works for launch email alerts now, browser push next, and future iOS/Android app notifications later. Prod...
Admin
Followup from 108. This builds on the firstparty analytics event stream and durable playback state after the initial dashboard lands. Context 108 ships the schema, ingestion, se...
Media
Followup from 108. This belongs with the active 98 media player surface, not the analytics foundation branch. Context 108 added firstparty analytics storage, ingestion routes, d...
Admin
Followup from 108. This should wait for the active admin/email and roadmap/admin layout branches to settle before touching shared admin UI files. Context 108 added an isolated /...
Admin
Source From Mark's Obsidian notes: TOPIC 8 SECURITY.md and howcodexworkswithmark.md (ranked priority 7 in the corrected list), plus Mark's followup confirmation in Codex chat. G...

Design
Adds restrained motion and microinteractions to CTAs, support cards, newsletter success, and the listening room while respecting reduced-motion preferences.
Subtle flourishes
Media
Source From Mark's Obsidian notes: TOPIC 5 FAN ACCOUNT SETTINGS.md (ranked priority 5), plus Mark's followup confirmation in Codex chat. Goal Make /account feel fast, stable, co...
Auth
Source From Mark's Obsidian notes: TOPIC 4 AUTH AND SIGN UP.md (ranked priority 4), plus Mark's followup confirmation in Codex chat. Goal Implement the agreed relationship betwe...
Auth
Source From Mark's Obsidian notes: TOPIC 4 AUTH AND SIGN UP.md (ranked priority 4). Goal Eliminate contradictory loggedin/loggedout UI states across the site and use Better Auth...
Auth
Source From Mark's Obsidian notes: TOPIC 4 AUTH AND SIGN UP.md (ranked priority 4), plus Mark's followup confirmation in Codex chat. Goal Replace the disruptive Join the list ju...
Source From Mark's Obsidian notes: TOPIC 1 ADMIN AND EMAIL.md and howcodexworkswithmark.md (ranked priority 1). Goal Make inbound mail to site addresses visible and understandab...
Admin
Source From Mark's Obsidian notes: TOPIC 1 ADMIN AND EMAIL.md (ranked priority 1). Goal Make /admin/email a complete email/subscriber work area rather than a crowded block on th...
Admin
Source From Mark's Obsidian notes: TOPIC 1 ADMIN AND EMAIL.md (ranked priority 1). Goal Make the admin surface clearer and safer for the two real admins: Mark and Laurel. Detail...


Media
Track where each public asset came from, capture upload rights metadata, add a replacement review queue, and document the future resumable large-upload path before more artists depend on the media library.
Provenance review

Admin
Give Laurel and Mark admin controls to hide, flag, and restore timed comments while keeping the public player limited to visible notes.
Comment controls



Auth
Audit newsletter confirmation, listen-page account creation, magic-link login, account settings, and sign-out so listeners see one coherent account/subscription state.
Account state


























Operations
A public roadmap backed by GitHub issues so project status survives chat compaction and late-night context drift.
This page
Listener data
Better Auth email/password accounts, newsletter rows, timed comments, progress writes, and the first account page.
Deployed
Foundation
Next.js on Cloudflare Workers via OpenNext, D1, R2, migrations, seed data, custom routes, and deployment notes.
Deployed
GitHub issues are the engineering source of truth. This page reads public Fanful roadmap issues, merges them with curated summaries and screenshots, infers the Web/iOS/Android/agent workstream, polls for label changes, and can overlay short-lived sanitized Codex status when an active agent publishes it.
Open GitHub roadmap issues