From Doom Scrolling to Bloom Scrolling
A perspective-driven content aggregator that counters infinite scrolling by optimizing for serendipity, finite feeds, and raw data instead of engagement and outrage.
Transform the endless scroll into a finite, intentional experience that leaves users feeling more informed and optimistic. Bloom Scroll synthesizes diverse content sourcesβfrom statistical truth to frontier science to visual cultureβinto a curated daily digest rooted in epistemic progress and constructive perspective.
Core Principle: "The End" is the product. Every feed has a definitive stopping point.
Bloom Scroll is built on four anti-doomscroll principles:
- Hard cap of 20 cards per day
- Completion celebrated with "The Garden is Watered" message
- No "Load More" escape hatch
- Daily reset encourages routine
- Users "plant" seeds at the bottom
- Scroll up to see ideas bloom
- Newest content appears at bottom (like chat)
- Natural stopping point at top (completion widget)
- Render charts from source CSV/JSON (not screenshots)
- Interactive visualizations with fl_chart
- Preserve data provenance and context
- "Show your work" transparency
- Penalize echo chambers (cosine distance 0.3-0.8)
- Prioritize blindspot perspectives
- Mix aesthetics + data + science
- "Robin Hood" visual rhythm
- FastAPI (Python 3.11+) - Async REST API
- PostgreSQL (15+) with pgvector - Vector similarity search
- Sentence-BERT (all-MiniLM-L6-v2) - 384-dim embeddings
- Redis - Caching and session management
- Flutter/Dart - Cross-platform mobile UI
- Riverpod - State management
- fl_chart - Interactive data visualization
- Masonry Grid - Staggered layout (Pinterest-style)
- Docker Compose - Local development
- Alembic - Database migrations
- Docker & Docker Compose
- (Optional) Python 3.11+ for backend development
- (Optional) Flutter SDK 3.0+ for frontend development
docker-compose up -d --buildThis starts:
- PostgreSQL with pgvector extension
- Redis cache
- FastAPI backend (port 8000)
docker-compose exec api alembic upgrade headCreates the bloom_cards table with vector columns.
docker-compose exec api python scripts/seed_data.pyIngests sample OWID datasets (CO2, life expectancy, child mortality).
cd frontend
flutter pub get
flutter runAPI Endpoints:
- iOS Simulator:
http://localhost:8000 - Android Emulator:
http://10.0.2.2:8000 - Physical Device:
http://<your-ip>:8000
View API Docs: http://localhost:8000/docs
bloom-scroll/
βββ π docs/ # Documentation & Architecture
β βββ brief.md # Product concept
β βββ prd.md # Product Requirements Document
β βββ ARCHITECTURE.md # Technical deep dive
β βββ DESIGN_SYSTEM.md # "Paper & Ink" design tokens
β βββ ROADMAP.md # Story tracking (STORY-001 to STORY-007)
β βββ design_tokens.md # Raw design specifications
β βββ STORY-004-IMPLEMENTATION.md # Serendipity algorithm docs
β βββ STORY-006-IMPLEMENTATION.md # Perspective overlay docs
β βββ STORY-007-IMPLEMENTATION.md # Finite feed docs
β
βββ π backend/ # Python FastAPI
β βββ app/
β β βββ models/ # SQLAlchemy models (BloomCard)
β β βββ ingestion/ # OWID, OpenAlex, CARI connectors
β β βββ curation/ # Bloom algorithm (serendipity)
β β βββ analysis/ # NLP models (SBERT, BiasBERT)
β β βββ api/ # REST endpoints
β β βββ core/ # Database, config
β βββ alembic/ # Database migrations
β βββ scripts/ # Seed data, utilities
β βββ tests/ # Pytest tests
β βββ Dockerfile
β βββ pyproject.toml # Poetry dependencies
β βββ README.md
β
βββ π¨ frontend/ # Flutter/Dart
β βββ lib/
β β βββ models/ # Dart data models (BloomCard, Feed)
β β βββ screens/ # Feed screen, settings
β β βββ widgets/ # Cards, perspective overlay, completion
β β βββ providers/ # Riverpod state management
β β βββ services/ # API client, storage
β β βββ theme/ # Design tokens (colors, typography)
β βββ assets/ # Images, icons
β βββ test/ # Flutter tests
β βββ pubspec.yaml # Dependencies
β βββ README.md
β
βββ ποΈ infrastructure/ # Docker & Config
β βββ docker-compose.yml # PostgreSQL, Redis, API services
β
βββ π STORY-001.md # Infrastructure & OWID ingestion
βββ π STORY-002.md # Flutter scaffold & charting
βββ π STORY-003.md # Aesthetics & masonry grid
βββ docker-compose.yml # Main Docker Compose file
βββ README.md # This file
"Paper & Ink" - The UI feels like a printed Sunday newspaper, not a software application.
- High Contrast: Black ink (
#1A1A1A) on warm paper (#FDFCF8) - No Shadows: Use borders and whitespace for hierarchy
- Data First: Charts are the "hero" images, not decorations
- Botanical Colors: Growth green (
#2D6A4F) for positive trends
See DESIGN_SYSTEM.md for complete specifications.
Six content types blended into unified BloomCard format:
| Type | Source | Purpose |
|---|---|---|
| π Data | Our World in Data | Statistical truth, macro trends |
| π¬ Science | OpenAlex | Frontier research, academic papers |
| π¨ Aesthetic | Are.na / CARI | Visual culture, design inspiration |
| π Indie Web | Neocities | Human-made web, small internet |
| π Narrative | TVTropes | Story patterns, cultural analysis |
| π Education | My-MOOC | Free courses, skill building |
cd backend
# Install dependencies (Poetry)
poetry install
# Run tests
poetry run pytest
# Code quality
poetry run black .
poetry run ruff check .
# Database migrations
poetry run alembic revision --autogenerate -m "Description"
poetry run alembic upgrade head
# Start dev server
poetry run uvicorn app.main:app --reloadcd frontend
# Install dependencies
flutter pub get
# Generate code (Riverpod, JSON serialization)
flutter pub run build_runner build --delete-conflicting-outputs
# Run tests
flutter test
# Build for release
flutter build apk --release # Android
flutter build ios --release # iOS- ARCHITECTURE.md - Technical deep dive (Root System, Perspective Engine, Bloom Logic)
- DESIGN_SYSTEM.md - "Paper & Ink" design tokens and guidelines
- ROADMAP.md - Story tracking (STORY-001 to STORY-007)
- Product Brief - Core concept and differentiators
- PRD - Detailed product requirements
- STORY-004 - Serendipity algorithm & vector search
- STORY-006 - Perspective overlay & 3D flip animation
- STORY-007 - Finite feed & completion widget
Version: 0.1.0 Phase: Initial Development Last Updated: 2025-11-19
- β STORY-001: Infrastructure & OWID Ingestion
- β STORY-002: Flutter Scaffold & Charting
- β STORY-003: Aesthetics & Masonry Grid
- β STORY-004: Vector Serendipity & Bias Engine
- β STORY-006: Perspective Overlay & Flip Animation
- β STORY-007: Finite Feed & Completion Widget
- π§ STORY-005: Poison Pill & Stability Tests
See ROADMAP.md for detailed tracking.
- Finite Feeds: Respect user time with definitive endpoints
- Serendipity: High-value outliers over echo chambers
- Transparency: Show data provenance and bias scores
- Privacy: No tracking sold to third parties
Proprietary - Bloom Scroll Team
Built with intention. Consumed with mindfulness. πΈ