A Modern, Full-Stack Note-Taking Application
Pursuing the goal of creating a powerful, secure, and beautiful note-taking experience
NOTAKE is a full-stack web application for creating, managing, and organizing notes. Built with modern technologies and best practices, it features a beautiful dark-themed UI, secure authentication, and seamless real-time data synchronization between frontend and backend.
β User Authentication
- Secure JWT-based authentication
- User registration with email validation
- Password encryption using BCrypt
- Token-based session management
- Auto-logout on token expiration
β Note Management
- Create, read, update, and delete notes
- Rich text content support
- Real-time search by title
- Timestamp tracking (created/updated)
- Responsive grid layout
β Modern UI/UX
- Beautiful dark gradient theme (Cyan & Purple accents)
- 3D card effects with smooth animations
- Fully responsive design (mobile-friendly)
- Loading states and error handling
- Modal-based note editing
β Security & Performance
- Protected routes and API endpoints
- CORS configuration
- Request/response interceptors
- Automatic error handling
- Database connection pooling
- Backend API with Spring Boot
- PostgreSQL database setup
- RESTful endpoints for notes CRUD
- JPA/Hibernate ORM integration
- Health check endpoints
- JWT token generation and validation
- User registration and login
- Spring Security configuration
- Password encryption
- Token-based authorization
- React + TypeScript setup with Vite
- Beautiful authentication page (Login/Register)
- Dashboard with notes management
- API service layer with Axios
- Protected routing
- State management
- Error handling and validation
- Docker containerization
- Docker Compose multi-container setup
- Nginx configuration
- GitHub Actions CI/CD
- Production deployment
- Monitoring and logging
- Note categories and tags
- Rich text editor (Markdown support)
- File attachments
- Note sharing and collaboration
- Export functionality (PDF, Markdown)
- User profile management
- Dark/Light theme toggle
- Real-time updates with WebSockets
- Framework: Spring Boot 4.0.2
- Language: Java 21
- Database: PostgreSQL
- Security: Spring Security + JWT
- ORM: Hibernate/JPA
- Build Tool: Maven
- Framework: React 19
- Language: TypeScript 5.9
- Build Tool: Vite 7.2
- HTTP Client: Axios
- Routing: React Router DOM 7
- Styling: Custom CSS (Dark Theme)
- Containerization: Docker + Docker Compose
- Web Server: Nginx
- CI/CD: GitHub Actions
- Version Control: Git
- Java 21 or higher
- Node.js 20+ and npm
- PostgreSQL 15+
- Docker & Docker Compose (for containerized setup)
- Git
- Docker and Docker Compose installed
- Ports 80, 8080, and 5432 available
docker-compose up -dThis will start:
- Frontend on http://localhost
- Backend API on http://localhost:8080
- PostgreSQL on localhost:5432
docker-compose psdocker-compose logs -fdocker-compose downdocker-compose down -vStart PostgreSQL:
# On WSL/Linux
sudo service postgresql start
# Verify it's running
sudo service postgresql statusCreate database and user:
sudo -u postgres psqlRun these SQL commands:
CREATE USER notake_user WITH PASSWORD 'strongpassword';
CREATE DATABASE notake_db;
GRANT ALL PRIVILEGES ON DATABASE notake_db TO notake_user;
\c notake_db
GRANT ALL ON SCHEMA public TO notake_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO notake_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO notake_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO notake_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO notake_user;
\qVerify connection:
psql -U notake_user -d notake_db -h localhost
# Password: strongpassword---Authentication Endpoints
POST /api/auth/register- Register new userPOST /api/auth/login- Login userGET /api/auth/validate- Validate JWT token
GET /api/notes- Get all notesGET /api/notes/{id}- Get specific notePOST /api/notes- Create new notePUT /api/notes/{id}- Update noteDELETE /api/notes/{id}- Delete noteGET /api/notes/search?keyword=x- Search notes by titleGET /api/notes/count- Get total notes count
GET /api/health- Check API status
π For detailed API documentation, see: notake-frontend/API_ENDPOINTS.md ./mvnw spring-boot:run
mvnw.cmd spring-boot:run
**Backend will start on:** http://localhost:8080
**Verify backend is running:**
```bash
curl http://localhost:8080/api/health
# Should return: {"status":"OK"}
Navigate to frontend directory:
cd notake-frontendConfigure API URL:
Edit .env file:
VITE_API_URL=http://localhost # Spring Boot Backend
β βββ src/main/java/com/example/notake_backend/
β β βββ config/ # Security & CORS config
β β βββ controller/ # REST API controllers
β β β βββ AuthController.java # Authentication endpoints
β β β βββ NoteController.java # Notes CRUD endpoints
β β β βββ HealthCheckController.java
β β βββ dto/ # Data Transfer Objects
β β βββ model/ # JPA Entities (User, Note)
β β βββ repository/ # Spring Data JPA repositories
β β βββ security/ # JWT utilities & filters
β β βββ service/ # Business logic services
β βββ src/main/resources/
β β βββ application.properties # Database & JWT config
β βββ Dockerfile
β βββ pom.x & Verification
### Test Backend Health
```bash
curl http://localhost:8080/api/healthcurl -X POST http://localhost:8080/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "password123",
"fullName": "Test User"
}'curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "password123"
}'curl -X POST http://localhost:8080/api/notes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"title": "Test Note",
"content": "This is a test note"
}'psql -U notake_user -d notake_db -h localhost\dt -- List tables
SELECT * FROM users; -- View users
SELECT * FROM notes; -- View notes- API_ENDPOINTS.md - Complete API reference with examples
- INTEGRATION.md - Frontend-backend integration guide
- FRONTEND_INTEGRATION.md - Integration summary and status
- QUICKSTART.md - Quick reference for common tasks
NOTAKE features a modern, dark-themed interface inspired by contemporary design trends:
-
Color Palette:
- Background: Dark gradients (#0f172a β #1e293b)
- Accents: Cyan (#06b6d4) and Purple (#667eea)
- Text: Light gray shades for optimal readability
-
UX Principles:
- Minimal friction: Quick login/register with smooth transitions
- Visual feedback: Loading states, hover effects, animations
- Responsive: Works seamlessly on desktop, tablet, and mobile
- Accessible: Clear contrast, readable fonts, intuitive navigation
- Password Security: BCrypt hashing with salt
- JWT Authentication: Secure token-based sessions
- Protected Routes: Frontend route guards
- API Authorization: Bearer token validation on all protected endpoints
- CORS Configuration: Controlled cross-origin requests
- SQL Injection Prevention: JPA/Hibernate parameterized queries
- XSS Protection: React's built-in escaping
Backend:
- Update
application.propertieswith production database credentials - Set strong JWT secret key
- Configure CORS for production domain only
- Enable HTTPS
- Set up connection pooling
- Configure logging and monitoring
Frontend:
- Update
.envwith production API URL - Build optimized production bundle:
npm run build - Deploy
distfolder to static hosting (Netlify, Vercel, etc.) - Configure environment-specific variables
- Enable HTTPS
- Set up CDN for assets
Database:
- Use managed PostgreSQL service (AWS RDS, DigitalOcean, etc.)
- Enable backups and point-in-time recovery
- Configure connection limits
- Set up monitoring and alerts
- Use strong passwords and connection encryption
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- User profile management and settings
- Note categories and tags system
- Rich text editor with Markdown support
- File attachments (images, PDFs)
- Note sharing and collaboration
- Export functionality (PDF, Markdown, JSON)
- Note templates
- Bulk operations (delete multiple, move to category)
- Advanced search (full-text, filters)
- Real-time collaboration with WebSockets
- Mobile app (React Native)
- Desktop app (Electron)
This project is licensed under the MIT License - see the LICENSE file for details.
- Spring Boot team for the excellent framework
- React team for the powerful UI library
- PostgreSQL community for the robust database
- All open-source contributors who made this possible
Built with β€οΈ by the NOTAKE Team
Pursuing excellence in note-taking
β Star this repo if you find it useful!
- Open browser: http://localhost:5173
- Register a new user:
- Switch to "Sign Up" tab
- Enter: Full Name, Username, Email, Password
- Click Submit
- You'll be auto-logged in and redirected to Dashboard
- Create notes, edit, delete, and search!
Verify data in database:
psql -U notake_user -d notake_db -h localhost-- View registered users
SELECT id, username, email, full_name FROM users;
-- View created notes
SELECT id, title, LEFT(content, 50) as preview, created_at FROM notes;GET /api/health/ping- Check if app is runningGET /api/health/db- Test database connection
GET /api/notes- Get all notesGET /api/notes/{id}- Get specific notePOST /api/notes- Create new notePUT /api/notes/{id}- Update noteDELETE /api/notes/{id}- Delete noteGET /api/notes/search?keyword=x- Search notesGET /api/notes/count- Count total notes
Edit notake-backend/src/main/resources/application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/notake_db
spring.datasource.username=notake_user
spring.datasource.password=strongpasswordThe Nginx configuration proxies /api/* requests to the backend automatically.
GitHub Actions automatically runs on push/PR to main or develop:
- β Backend: Maven build, tests, Docker image
- β Frontend: npm build, linting, Docker image
See .github/workflows/ci.yml for details.
NOTAKE/
βββ notake-backend/ # Spring Boot backend
β βββ src/
β βββ Dockerfile
β βββ pom.xml
βββ notake-frontend/ # React + TypeScript frontend
β βββ src/
β βββ Dockerfile
β βββ nginx.conf
β βββ package.json
βββ docker-compose.yml # Multi-container setup
βββ .github/workflows/ # CI/CD pipelines
curl http://localhost:8080/api/health/dbcurl -X POST http://localhost:8080/api/notes \
-H "Content-Type: application/json" \
-d '{"title":"Test Note","content":"Hello World"}'curl http://localhost:8080/api/notes- Add authentication (JWT)
- Implement note categories/tags
- Add rich text editor
- Dark mode support
- Export notes (PDF, Markdown)
MIT