{"slug": "every-place-has-more-than-one-story", "title": "Every place has more than one story", "summary": "A developer built Parallel, an open-source, map-first storytelling platform that lets users attach multiple independent story chapters — history, personal memory, local legend, fiction and editorial — to real-world locations. The stack pairs a FastAPI backend with a Next.js App Router frontend and an optional local PostGIS database, with a design rule that core browsing keeps working when AI, audio or storage are unavailable; the AI-assisted \"concierge\" discovery feature uses Gemma4 32B but falls back to deterministic, grounded ranking that needs no model key. Map tiles come from OpenFreeMap, which requires no key or signup, so the full stack can be self-hosted by local writers or historical societies.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass](https://dev.to/challenges/hacktoberfest-week1-2026-10-05)*\n\nParallel is a map-first storytelling platform for discovering and sharing stories tied to real places. A single location can hold many independent story chapters: history, personal memory, local legend, fiction, and editorial pieces.\n\nInstead of scrolling a feed, you open a map, pick a place near you, and read what people have said about it. Visits are self-reported, so the app records that you went somewhere but never claims to verify it. The goal is to pull people toward the street they are standing on.\n\nIt is for people who walk around cities and want more context about what they pass, and for writers and local historians who want to publish sourced stories about specific places.\n\n**Every place has more than one story.**\n\nParallel is a map-first storytelling platform for discovering and sharing stories connected to real places. A location can hold many independent story chapters.\n\n```\nparallel/\n├── apps/\n│   ├── backend/       # FastAPI API (Python)\n│   └── frontend/      # Next.js App Router (TypeScript)\n├── docs/guide.md      # Development, configuration, and integration guide\n├── .env.example\n├── docker-compose.yml # Optional local PostGIS database\n└── SETUP.md\n```\n\nPrerequisites: Node.js 22+, npm, Python 3.12+, `uv`, and Git. Docker Desktop is only needed if you\nrun the local PostGIS container.\n\n`.env.example` to `.env` and `apps/frontend/.env.local.example` to `apps/frontend/.env.local`.` apps/backend`, run `uv sync --extra dev`, `uv run alembic upgrade head`, then `uv run uvicorn app.main:app --reload`.` apps/frontend`, run `npm install`, then `npm run dev`.\nThe design rule is that core browsing must keep working when AI, audio, or storage are unavailable. The AI-assisted discovery in the \"concierge\" feature has a deterministic, grounded fallback that needs no model key. Narration and map tiles are optional and configured through environment variables.\n\nAI model: Gemma4 32B\n\nOpen source lets a platform like this run on tools anyone can inspect. The codebase, schema, migrations, and API contract are all public, so a neighbourhood historical society or a local writer can self-host it without a vendor relationship. The map uses OpenFreeMap tiles, which need no key or signup, so a new contributor can run the full stack locally.\n\nKeeping AI optional matters too. Because the deterministic ranking works without a model, the product is not tied to any single closed API, and a story about a place does not depend on a model being available.\n\n1.Best Use of Render\n\n2.Best Use of Render Gemma\n\n3.Best Use of Eleven Labs\n\n4.Best Use of Sentry", "url": "https://wpnews.pro/news/every-place-has-more-than-one-story", "canonical_source": "https://dev.to/asad_jawed_ee59d2763ac6fc/every-place-has-more-than-one-story-4cod", "published_at": "2026-10-11 19:57:06+00:00", "updated_at": "2026-10-11 20:02:10.242287+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "generative-ai"], "entities": ["Parallel", "FastAPI", "Next.js", "PostGIS", "Gemma4 32B", "OpenFreeMap", "Eleven Labs", "Sentry"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/every-place-has-more-than-one-story", "markdown": "https://wpnews.pro/news/every-place-has-more-than-one-story.md", "text": "https://wpnews.pro/news/every-place-has-more-than-one-story.txt", "jsonld": "https://wpnews.pro/news/every-place-has-more-than-one-story.jsonld"}}