The Problem
Linkedin notes only allow a maximum of 200 characters for initial connection requests. But some pitches take more than 200 characters
The Real Problem
I don't want to pay for Linkedin Premium, and I needed an excuse to learn how to use hono
The Solution
QuickNote, a simple way to send markdown notes to anyone.
Think pastebin, but customizable short slugs that lead to a landing page with your note.
The Product
Auth
- Basic email, password auth with a JWT stored locally.
- A way to recover lost accounts
- update passwords
- password reset
Notes
- A markdown editor, then we store the text in a mongoDB collection with it's slug and metadata (timestamps, userID)
Note
Most of the UI is vibe coded
Installation
Prerequisites
Before you begin, ensure you have the following installed on your system:
- Bun - JavaScript runtime and package manager
- MongoDB - Database (local installation or MongoDB Atlas)
- Git - Version control
Getting Started
-
Clone the repository
git clone https://github.com/JoeEverest/quicknote.git cd quicknote
Backend Setup
-
Navigate to the backend directory
-
Install dependencies
-
Environment Configuration
Create a
.envfile in the backend directory with the following variables:MONGO_URI=mongodb://localhost:27017/quicknote JWT_SECRET=your-super-secret-jwt-key-here PORT=3000
Note: Replace the values with your actual configuration:
MONGO_URI: Your MongoDB connection string (local or Atlas)JWT_SECRET: A secure random string for JWT token signingPORT: Port number for the backend server (default: 3000)
-
Start the development server
The backend API will be available at
http://localhost:3000
Frontend Setup
-
Open a new terminal and navigate to the frontend directory
-
Install dependencies
-
Start the development server
The frontend application will be available at
http://localhost:5173
Database Setup
Option 1: Local MongoDB
- Install MongoDB locally following the official installation guide
- Start MongoDB service
- The application will automatically create the necessary collections
Option 2: MongoDB Atlas (Cloud)
- Create a free account at MongoDB Atlas
- Create a new cluster
- Get your connection string and update the
MONGO_URIin your.envfile
Verification
To verify everything is working correctly:
- Visit
http://localhost:5173in your browser - Register a new account
- Create your first note
- Share the note using the generated slug
Building for Production
Backend
cd backend bun run build # If build script exists, otherwise the app runs directly
Frontend
cd frontend
bun run buildThe built files will be in the frontend/dist directory, ready for deployment.
Tech Stack
Backend
- Hono - Fast, lightweight web framework
- Bun - JavaScript runtime and package manager
- MongoDB - NoSQL database with Mongoose ODM
- Zod - TypeScript-first schema validation
- JWT - JSON Web Tokens for authentication
- TypeScript - Type safety and better developer experience
Frontend
- React 19 - UI library with TypeScript
- React Router - Client-side routing
- TanStack Query - Data fetching and caching
- Tailwind CSS - Utility-first CSS framework
- Shadcn/UI - Component library built on Radix UI
- Motion (Framer Motion) - Animations
- React Markdown - Markdown rendering with GitHub Flavored Markdown
- Vite - Build tool and development server
Development
Project Structure
quicknote/
├── backend/ # Hono API server
│ ├── src/
│ │ ├── routes/ # API routes
│ │ ├── utils/ # Helper functions
│ │ └── index.ts # Server entry point
│ └── package.json
└── frontend/ # React frontend
├── src/
│ ├── components/ # Reusable components
│ ├── pages/ # Page components
│ ├── services/ # API services
│ └── lib/ # Utilities
└── package.json
API Endpoints
POST /app/auth/register- User registrationPOST /app/auth/login- User loginGET /app/notes- Get user's notesPOST /app/notes- Create new notePUT /app/notes/:id- Update noteDELETE /app/notes/:id- Delete noteGET /app/note/:slug- Get public note by slug
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.