A brutalist-style note-taking application built with modern web technologies.
Keyless Note App is a simple yet powerful note-taking application with a distinctive brutalist design. It combines modern web technologies to provide a seamless user experience for creating, reading, updating, and deleting notes.
You can try out the live demo of Keyless Note App here. The demo is hosted on private Linux server and is available for testing.
- Frontend: Next.js 15 with React 19
- UI Components:
- React components
- Web Components built with Lit
- Styling: TailwindCSS 4
- Database: SQLite (via better-sqlite3)
- Notifications: react-toastify
- API Optimization: SWR for data fetching
keyless-note-app/
├── components/ # React components
├── db/ # Database operations
├── lib/ # Utility functions
├── pages/ # Next.js pages and API routes
│ ├── api/ # Backend API endpoints
│ └── ... # Frontend pages
├── public/ # Static assets
├── styles/ # Global styles
├── types/ # TypeScript type definitions
└── web-components/ # Lit-based web components
│ └── icons # Web components icons
- Create, read, update, and delete notes
- Responsive brutalist design
- Real-time updates with optimistic UI
- Server-side rendering with Next.js
- Custom Web Components integration with React
- SQLite database for data persistence
- Node.js 18+ or Bun
- npm, yarn, pnpm, or bun
- Clone the repository
- Install dependencies:
npm install
# or
yarn
# or
pnpm install
# or
bun install
- Run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
- Open http://localhost:3000 in your browser
Build the application for production:
npm run build
npm start
For PM2 deployment:
npm run build
pm2 start npm --name "keyless-note-app" -- start
The application uses Next.js with React for the frontend. The main page ( pages/index.tsx ) displays a list of notes and provides functionality to add, edit, and delete notes.
The application uses Lit to create reusable web components. The note-card component is a key example, providing a consistent UI for displaying notes across the application.
The application uses Next.js API routes for backend functionality:
- GET /api/notes : Retrieve all notes
- POST /api/notes : Create a new note
- PUT /api/notes/[id] : Update a specific note
- DELETE /api/notes/[id] : Delete a specific note
SQLite is used for data persistence, with operations defined in the db/ directory.
The project uses ESLint and TypeScript for code quality and type safety.
- Add user authentication
- Implement note sharing
- Implement note Markdown support
- Add note tags
- Add note search
- Add note history
- Add note versioning
This project is licensed under the MIT License.