Cost structure (target: <€30/month total)
| Item | Cost | Notes |
|---|---|---|
| Supabase free tier | €0 | Keep-alive cron prevents pause; upgrade (€25/mo) only when real traffic demands it |
| Vercel hobby | €0 | Marketing site |
| IG Graph API | €0 | Official Business Discovery — no scraping risk |
| Firebase Analytics + FCM | €0 | |
| Apple Developer | €99/yr | The one unavoidable cost, needed for TestFlight/App Store — defer until Phase 1 |
| Google Play | $25 once | |
| Content production | €0 | Digest tool auto-generates carousels |
Advertising plan — pre-launch, Instagram-first (€0 media budget)
Principle: the digest IS the ad. @fommquell proved a weekend-digest page grows organically in this exact niche; Flow’s tool automates what they do by hand.
- Cadence: 2 carousels/week — Wed “anteprima weekend” (per-target grouping: TECHNO / APERITIVO / LIVE slides), Fri full digest (per-day VEN/SAB/DOM). Stories daily: countdown, polls (“dove andate stasera?”), repost of venue stories. All formats already documented in Instagram Strategy (pillars, timing, hashtags).
- Distribution hacks at €0: tag every venue/organizer that appears in a digest (they reshare — their audience is the acquisition channel); DM the digest to RE-area student group-chats admins (Unimore); collab posts with 2-3 micro venue pages per month.
- Conversion: every carousel CTA → chasetheflow.it (waitlist). Target: 1k RE-area followers → 20 beta testers → public beta.
- Measure weekly: follower growth RE-area %, saves/share per digest (the algorithm signals), waitlist conversions. Kill/adjust formats that don’t get saves.
Event sourcing from Instagram (the moat)
Pages like @italghisa publish every RE event as a post. Flow collects them via the official IG Graph Business Discovery API (zero ban risk, zero cost — client: tools/instagram_post_creator/pipeline/ig_graph_client.py):
- Reads public posts of configured handles (
IG_NIGHTLIFE_HANDLES=italghisa,...), extracts facts only (date/time/venue/title — captions are copyrighted and never stored). - Never-miss guarantee: posts the parser can’t date go to
queue/ig_unparsed.jsonfor 1-minute manual review — no event silently lost. - Merged with ERT open data behind one normalized shape; dedup keeps the richer source.
- Digest generator groups by day or by target (skin
targets) — non-repetitive covers via real per-weekend stats (free count, dominant vibe, busiest night). - Token-free path — LIVE 2026-07-22: Elia could not obtain a Meta token, so
ig_thirdparty_client.pyfetches public posts via instagram-looter2 on RapidAPI (free tier ~150 req/mo; GET/id?username={handle}then/user-feeds2?id={id}). The provider fetches on its own servers → the user’s IP and account are never used. Verified end-to-end: real posts from arci_tunnel / laviadellespezie / gargottapopolgiost → 4 nightlife events merged with 20 ERT. Config lives in.env(IG_THIRDPARTY_*). instagram120 was tried first but is a media downloader (needs a post link; no “list a user’s posts” endpoint) — unsuitable. Extraction refined: no year-roll-forward on recaps (killed fake future dates), date/weekday lines skipped when choosing titles. Both readers plug behindevent_puller, degrade to [] on failure (ERT keeps working). Trade-off: third-party APIs are ToS-grey and can change. - Not possible, for the record: reading a private saved-posts collection without the account — that data only exists behind the owner’s login. Sourcing works from public pages (italghisa etc.), not private saves.
Control Room dashboard (built 2026-07-22)
A local web dashboard at http://localhost:5050/dashboard (Flask, tools/instagram_post_creator/app.py + ui/dashboard.html) is the single control plane:
- Pagine monitorate — add/remove the IG handles to collect from (persisted in
config/monitor.json). - Budget richieste — live gauge of third-party API calls used vs the monthly free-tier cap; the reader (
ig_thirdparty_client) records every call and hard-stops before exceeding the cap (counter auto-resets each month). - Genera — one click builds a digest grouped by day or by target (vibe).
- Coda — preview each generated post (full-screen viewer, swipe all slides), Modifica its texts (edit event title/time/venue/category → regenerate via
/api/render), then Approva / Programma (schedule publish time) / Scarta.
Event data comes from the ERT open-data API (real exhibitions/festivals), not fake data. Long-running events (a mostra open through the weekend) now render as “IN CORSO · fino al …” instead of their stale start date — and any residual data glitch (e.g. mojibake in an ERT title) can be hand-fixed in the Modifica editor before publishing.
Security hardening applied same day: secure_filename on the export route (path-traversal), Flask debug gated behind FLASK_DEBUG, XSS-safe DOM construction in the dashboard. Note: tools/ is not yet under git — version it before running from a cloud cron.
Path to first revenue (from Target Study)
- Now→3 mo: free everything; grow channel + beta. Revenue: €0 by design.
- 3–6 mo: venues seen resharing digests get offered a free “featured” slot → relationship. PR list tool concept validated in conversations (PR economics run on WhatsApp/paper).
- 6+ mo (only if 100+ WAU): commission-only guestlist/ticketing (Clubbing/Xceed model: free for users, % on transactions). No subscriptions — the market rejected them.