← Ideas
Project Thread
Bulletin Board Revival: Digital-to-Physical Poster Maker
Turn online community posts into printable flyers that actually reach people without internet access.
# Bulletin Board Revival: Digital-to-Physical Poster Maker ## The Problem Roughly 15% of American households lack reliable home internet, and that number skyrockets among seniors, recent immigrants, and low-income families. These neighbors still rely on the ancient technology of paper—flyers on community boards at laundromats, libraries, churches, and corner stores—to learn about free stuff, city services, and local events. Meanwhile, all that valuable community information lives online where they can't see it. This tool bridges that gap by turning digital community data into beautiful, printable posters that volunteers can physically distribute. ## Who Uses It **The Poster Printer (Primary)**: Maria, 34, runs a small nonprofit that helps immigrants navigate city services. Every Friday, she prints 20 copies of the neighborhood digest and posts them at the laundromat, the halal grocery, and three church bulletin boards. She doesn't need to curate content manually—the tool pulls what's relevant automatically. **The Digital Beneficiary**: Mr. Chen, 78, doesn't have a smartphone but checks the board at his laundromat twice a week. He found out about free tax prep help and a neighbor giving away a working microwave—both from the digest poster. The QR code on the flyer lets his granddaughter pull up details when she visits. **The Business Owner**: Darnell owns the barbershop with the community board. He appreciates that the posters look clean and professional, not like the chaotic mess of random flyers. He's happy to give them prime board space. **The Civic Organizer**: A city council staffer uses this to ensure service announcements actually reach constituents who don't follow the city's Twitter account. ## Core Features 1. **One-Click Weekly Digest Generation**: User selects a neighborhood/zip code and date range, tool automatically pulls free items, civic services, and local news from WellSpr.ing and generates a clean, print-ready 8.5x11 PDF digest with 6-8 items. 2. **Smart Content Prioritization**: Items are ranked by relevance—free stuff with upcoming expiration dates, time-sensitive city services (tax deadlines, vaccine clinics), and breaking local news bubble to the top. User can manually reorder or remove items before printing. 3. **QR Code Bridge**: Each flyer item gets a small QR code linking to full digital details. For people without smartphones, the flyer also includes a simple phone number (sourced via `reach_number` tool) they can call for more info. 4. **Bilingual Output Option**: User toggles between English-only, Spanish-only, or side-by-side bilingual layout. The tool uses existing WellSpr.ing content (future: could flag items needing translation). 5. **Single-Item Poster Mode**: Beyond the digest, users can select one specific free item or civic service and generate a large-format poster with big text, a photo placeholder, and tear-off contact strips at the bottom. 6. **Print History & Location Tracker**: User logs where they posted flyers (laundromat on Oak St, library branch, etc.) and tracks what content went where. Helps avoid posting duplicates and shows coverage gaps. 7. **"Spotted in the Wild" QR Analytics**: Each generated QR code includes a simple tracking parameter. When scanned, the system logs it (no personal data—just scan count and approximate time). Printers can see: "Your Oak St laundromat poster was scanned 12 times this week." ## WellSpr.ing Integration Points ### MCP Tools (via POST to `https://wellspr.ing/mcp`, JSON-RPC 2.0) | Tool | Purpose in This Build | |------|-----------------------| | `get_free_items` | Pull available free stuff (furniture, food, supplies) to populate the "Free Items" section of the digest | | `get_local_news` | Fetch recent community news items for the "What's Happening" section | | `search_civic_services` | Find relevant city services (food banks, legal aid, health clinics) based on keywords or categories | | `get_city_services` | Get the standard roster of municipal services for the "City Resources" section | | `get_civic_ideas` | Surface community improvement proposals that neighbors might want to weigh in on | | `reach_number` | Generate callback numbers for flyer items so non-smartphone users can call for details | | `get_businesses` | Include local business resources (pharmacies, groceries) in service-oriented posters | | `get_adjacent_nodes` | For users near neighborhood boundaries, optionally pull content from adjacent areas | ### REST Endpoints | Endpoint | Purpose | |----------|---------| | `GET /api/officials` | Include relevant elected official contact info on civic service posters | | `GET /api/geo/portals?area_code=NNN` | Determine geographic boundaries and proper neighborhood naming for poster headers | ### WCIB Integration | Endpoint | Purpose | |----------|---------| | `GET /api/wcib/ideas` | Could surface other civic tech project ideas to include in a "Get Involved" section | | `POST /api/wcib/ody-ask` | Power a help feature where builders can ask questions about implementation | ### Future/Roadmap (Not Yet Live) - **Event Calendar API**: Currently no dedicated events endpoint; posters rely on `get_local_news` for event coverage. *Future: covenant commerce event listings would enhance this significantly.* - **Translation Services**: Bilingual mode currently requires content to already exist in multiple languages. *Future: integrated translation pipeline.* - **Scan-back Feedback Loop**: QR analytics currently one-way. *Future: allow poster-scanners to submit "I need this" signals back to the system.* ## Data Model ``` ┌─────────────────────────────────────────────────────────────┐ │ POSTERS │ ├─────────────────────────────────────────────────────────────┤ │ id (uuid), type (digest|single), area_code, created_at, │ │ date_range_start, date_range_end, language (en|es|both), │ │ pdf_url, status (draft|finalized) │ └─────────────────────────────────────────────────────────────┘ │ │ 1:many ▼ ┌─────────────────────────────────────────────────────────────┐ │ POSTER_ITEMS │ ├─────────────────────────────────────────────────────────────┤ │ id, poster_id (fk), source_type (free_item|news|service), │ │ source_id, title, summary, qr_code_url, tracking_code, │ │ display_order, reach_number │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ POSTINGS (where physical posters were placed) │ ├─────────────────────────────────────────────────────────────┤ │ id, poster_id (fk), location_name, location_type │ │ (laundromat|library|store|church|other), address, │ │ posted_at, removed_at │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ QR_SCANS (anonymous analytics) │
◎

This is your project thread with Ody.
Ask questions, share screenshots, talk through the build.
Anyone with this link can join the conversation.

Paste screenshots or upload images/PDFs · Shift+Enter for new line