The internet's emotional memory. One moment per day.
A minimalist web platform where people anonymously submit short reflections responding to a single daily prompt. No accounts, no likes, no comments, no feeds—just the quiet truth of how the world feels.
- Anonymous by default — no identity, no history, no clout
- Once per day — one submission per person, per prompt
- Text only — no images, no formatting, no noise
- Time over engagement — moments discovered through time, not popularity
- Emotion, not opinion — no debates, just experiences
- Daily Prompt — One global question that changes every 24 hours (UTC)
- 240 Character Echoes — Anonymous submissions classified by emotion
- Time-Based Discovery — Explore random moments, jump to any second, or revisit one year ago
- Emotion Pulse — Aggregated visualization of today's emotional landscape
- No Dark Patterns — No infinite scroll, no engagement metrics, no manipulation
- Framework: Next.js 14 (App Router, Edge Runtime)
- Database: Vercel Postgres
- Styling: Tailwind CSS
- Language: TypeScript
- Deployment: Vercel
# Clone repository
git clone https://github.com/luvaary/Echos.git
cd echoes
# Install dependencies
npm install
# Configure environment
cp .env.example .env
# Add your Vercel Postgres credentials to .env
# Setup database
npm run setup-db
# Run development server
npm run devVisit http://localhost:3000
id— Unique identifiertext— Prompt text (max 200 chars)date— UTC date (unique)
id— Unique identifiercontent— Echo text (max 240 chars)created_at— Timestampprompt_id— Reference to promptemotion— Classified emotion (calm, hopeful, anxious, heavy, joyful, lost)country— Optional 2-letter country code
Required variables (see .env.example):
POSTGRES_URL
POSTGRES_PRISMA_URL
POSTGRES_URL_NO_SSL
POSTGRES_URL_NON_POOLING
POSTGRES_USER
POSTGRES_HOST
POSTGRES_PASSWORD
POSTGRES_DATABASE
CRON_SECRET- Push code to GitHub
- Import project to Vercel
- Add Vercel Postgres database
- Environment variables are auto-populated
- Add
CRON_SECRETmanually - Deploy
The cron job will automatically rotate prompts daily at midnight UTC.
Requires:
- Node.js 18.17+
- PostgreSQL database
- Cron job scheduler for prompt rotation
echoes/
├─ app/ # Next.js App Router
│ ├─ api/ # API routes
│ ├─ echoes/ # Discovery pages
│ └─ submit/ # Submission page
├─ components/ # React components
├─ lib/ # Core logic
│ ├─ db.ts # Database layer
│ ├─ emotions.ts # Emotion classification
│ ├─ prompts.ts # Prompt rotation
│ └─ rateLimit.ts # Submission limits
├─ scripts/ # Setup scripts
└─ styles/ # Global styles
- Typography-first — Content is the design
- Neutral colors — Off-white backgrounds, near-black text
- No animations unless meaningful — Respect user attention
- Silence is intentional — Space to breathe
Contributions welcome. Please open an issue first to discuss changes.
MIT License - see LICENSE file for details
- Live Site: [Coming soon]
- GitHub: https://github.com/luvaary/Echos
- Issues: https://github.com/luvaary/Echos/issues
Built with intention. No dark patterns. Just moments.