Send and receive anonymous messages across the world.
Riverbank is a message-in-a-bottle web application where you can throw a message into the digital ocean and receive random messages from others around the globe.
- Throw Messages - Write an anonymous message and cast it into the river
- Receive Bottles - Get random messages from other users worldwide
- Reactions - React to messages with emojis (Discord-style multi-emoji support)
- Content Moderation - Report inappropriate content
- Rate Limiting - Fair usage protection against spam
- Dark/Light Theme - Comfortable viewing in any environment
- Responsive Design - Works on desktop and mobile devices
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite 6, TanStack Router |
| Backend | Hono.js |
| Database | Cloudflare D1 (SQLite) |
| ORM | Drizzle ORM |
| Styling | TailwindCSS 4, shadcn/ui |
| Hosting | Cloudflare Workers |
| Icons | raster-react |
Visit the live application at: riverbank.day
- Node.js 18+
- pnpm (recommended) or npm
- Cloudflare account (for deployment)
- Clone the repository:
git clone https://github.com/lstudlo/Riverbank.git
cd Riverbank- Install dependencies:
pnpm install- Set up local database:
pnpm run db:migrateStart the development server:
pnpm devYour application will be available at http://localhost:5173.
# Generate migrations from schema changes
pnpm run db:generate
# Apply migrations (local)
pnpm run db:migrate
# Open Drizzle Studio
pnpm run db:studio:localBuild and deploy to Cloudflare Workers:
pnpm run build
pnpm run deploysrc/
├── web/ # React 19 frontend (Vite 6)
│ ├── routes/ # TanStack Router (file-based)
│ ├── components/ # React components
│ │ └── ui/ # shadcn/ui components
│ ├── hooks/ # Custom hooks
│ └── lib/ # Utilities
└── worker/ # Hono.js API
└── db/ # Drizzle schema
migrations/ # Drizzle D1 migrations
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/bottles/throw |
Submit a message and receive random bottles |
POST |
/api/bottles/:id/like |
Like a bottle |
POST |
/api/bottles/:id/report |
Report a bottle |
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please make sure to update tests as appropriate and follow the existing code style.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
- Cloudflare for the amazing edge computing platform
- shadcn/ui for the beautiful component library
- Hono for the lightweight web framework
- Drizzle ORM for the type-safe database toolkit
