A decentralized, anonymous storytelling platform designed for survivors, witnesses, and allies. Users can release their "truths to the wind" anonymously, and others can witness or respond to these stories.
- Anonymous Storytelling: Submit stories without account creation or tracking.
- Comment System: Respond to stories anonymously.
- Smooth Interaction: Powered by Lenis for ultra-smooth scrolling.
- Global Reach: Multi-language support (English & Chinese).
- Admin Dashboard: Verification via Google Auth for designated admin emails.
- Framework: Next.js 15 (App Router)
- Styling: Tailwind CSS
- Database & Auth: Firebase (Firestore & Google Auth)
- Animation: Motion (formerly Framer Motion)
- Scroll Engine: Lenis
git clone https://github.com/the-passing-wind/web
cd web
npm installCreate a .env.local file in the root directory (copy from .env.example) and fill in your Firebase credentials:
# Firebase Configuration
NEXT_PUBLIC_FIREBASE_PROJECT_ID="your-project-id"
NEXT_PUBLIC_FIREBASE_APP_ID="your-app-id"
NEXT_PUBLIC_FIREBASE_API_KEY="your-api-key"
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN="your-app.firebaseapp.com"
NEXT_PUBLIC_FIREBASE_DATABASE_ID="(default)" # Or your specific database ID
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET="your-app.appspot.com"
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID="your-sender-id"
# Application Config
NEXT_PUBLIC_ADMIN_EMAIL="your-admin-email@gmail.com"-
Authentication: Enable Google Sign-In in the Firebase Console under Authentication > Sign-in method.
-
Firestore: Create a Firestore database.
-
Security Rules: Copy the content of
firestore.rulesfrom this repository into the Firebase Console's Rules tab. Note: Update theisAdmin()function in the rules with your actual admin email if you're not using the environment variable logic directly in the rules (since Firestore Rules cannot read client-side environment variables).function isAdmin() { return isEmailVerified() && request.auth.token.email in ["admin1@example.com", "admin2@example.com"]; }
npm run devOpen http://localhost:3000 to see the result.
This project is ready to be deployed on Vercel, Cloud Run, or any other Node.js hosting platform.
When deploying, make sure to add all the environment variables listed in .env.example to your deployment's configuration panel.
This application is built with anonymity at its core. No user data is collected beyond what is explicitly submitted in the story and comment forms. Admin access is strictly controlled via Firestore Security Rules.