Write to your future self, lock the message, and open it only when the right day arrives.
Future Messages is a full-stack MVP for creating time-locked personal messages with authentication, a private dashboard, and scheduled unlock dates.
The repository contains:
client: a React + Vite frontendserver: an Express + MongoDB API
The current UI copy is mostly in Portuguese, while this README is written in English for GitHub.
- User registration and login with JWT authentication
- Protected dashboard for authenticated users
- Create future messages with a scheduled delivery date
- Locked messages stay hidden until the unlock date is reached
- View unlocked messages and track pending ones
- Edit or delete messages only while they are still locked
- Health check endpoint for quick backend verification
- React 19
- Vite
- React Router
- Axios
- Tailwind CSS 4
- Node.js
- Express 5
- MongoDB + Mongoose
- JWT authentication
- bcryptjs
future-messages/
|-- client/
| |-- src/
| |-- public/
| |-- .env.example
| `-- package.json
|-- server/
| |-- src/
| |-- .env.example
| `-- package.json
|-- PLAN.md
`-- README.md
git clone <your-repo-url>
cd future-messagesInstall frontend dependencies:
cd client
npm installInstall backend dependencies:
cd ../server
npm installCreate client/.env from client/.env.example:
VITE_API_URL=http://localhost:5000/apiCreate server/.env from server/.env.example:
PORT=5000
MONGODB_URI=mongodb://127.0.0.1:27017/future-messages
JWT_SECRET=change-me
CLIENT_URL=http://localhost:5173cd server
npm run devThe API will run on http://localhost:5000.
Open a second terminal:
cd client
npm run devThe app will run on http://localhost:5173.
POST /api/auth/registerPOST /api/auth/loginGET /api/auth/me
GET /api/messagesPOST /api/messagesGET /api/messages/:idPUT /api/messages/:idDELETE /api/messages/:id
GET /api/health
- The frontend stores the JWT token in local storage.
- Locked messages return without their body until the scheduled date is reached.
- Unlocked messages cannot be edited or deleted.
- The backend expects MongoDB to be available before the server starts.
- Frontend: Vercel, Netlify, or Cloudflare Pages
- Backend: Render, Railway, Fly.io, or a VPS
- Database: MongoDB Atlas
Before pushing to GitHub:
- Make sure
client/.envandserver/.envare not committed - Keep
node_modulesandclient/distout of the repository - Review
PLAN.mdand.qodo/if you do not want internal planning files online
Add the license that matches how you want to share the project.