Full-stack application with Go backend and React.js frontend. Includes authentication, note management, and filtering.
- Go v1.23.0
- PostgreSQL v16.3
- Prometheus v3.2.1
- Node.js v22.13.1
- npm v10.9.2
- Clone repository
- Navigate to
root-directorywhererun-project.shappears. - Run the project
chmod +x run-project.sh && ./run-project.sh - Fornt End expected local url
http://localhost:5173 - Back End expected local url
http://localhost:8025
Live URL: https://note-it-quick.vercel.app/
- Backend: AWS EC2
- Frontend: Vercel
Username: superuser
Password: superuser
Swagger: SWAGGER DOCS
Prometheus: PROMETHEUS LIVE MERICS SCRAPPING
Grafana: GRAFANA LIVE METRICS GRAPHING
Grafana CREDENTIALS AND DASHBOARD DIRECT ACCESS:
- Credentials: user:
admin| password:notes - Dashboard: NOTES_APP
- Language & Framework: Golang | Gorilla Mux
- Database: PostgreSQL with GORM
- Architecture: Follows a layered architecture similar to a Spring Boot project, with Repository, Service, and Handlers (Controllers) layers
- Authentication: JWT-based authentication, with tokens sent via cookies
- Middleware: Custom middleware for request validation, authentication, and route protection
- Rate Limiting: Implements a rate limiter middleware to prevent abuse
- Logging: Access logging with Go-coded feature for better tracking
- Metrics: Built-in metrics using Go along with Prometheus, both are consumed by Grafana for live graphing
- Response Structure: Consistent structured response across the application
- API Documentation: Swagger for API documentation
- Library & Framework: React with Vite, deployed on Vercel and synced via git push
- Styling: Tailwind CSS with DaisyUI preset
- State Management: React Context API
- Notifications: Toast notifications using
react-hot-toast - Theme & Responsiveness: Responsive design with dark and light mode, utilizing standard dark/light themes
- EC2: Backend is fully deployed on AWS EC2 t2.micro free tier Linux AMI instance with setup of security group and role.
- Elastic IP: Secured static public IP avioding rotation
- Containerization: Dockerized backend and services
- Orchestration: Docker Compose for managing multi-container setup and resource consuption of each service
- Persistence:
- PostgreSQL data stored in a named Docker volume (
postgres-data) - Prometheus data persisted in a bind mount (
./backend/deploy/prometheus-datadirectory) - Grafana data persisted in a bind mount (
./backend/deploy/grafana-datadirectory)
- PostgreSQL data stored in a named Docker volume (
- HTTP to HTTPS Redirection / SSL-TLS Termination:
- HTTP to HTTPS redirection by configuring Nginx to terminate SSL/TLS encryption, SSL and DNS are provided by Namecheap check deployed backend api status here
- Automation:
- EC2 instance has an automated script that runs
docker-compose up -don machine restart, ensuring all services restart automatically
- EC2 instance has an automated script that runs
Swagger
Prometheus
Grafana
-
Sign Up or Log In
π Create an account or sign in to access your notes. -
Create & Manage Notes
- βοΈ Add: Write notes with titles and content.
- π Edit/Delete: Update or remove notes anytime.
-
Organize with Categories
π·οΈ Assign labels (e.g., Work, Personal) for quick filtering. -
Archive/Unarchive
π Toggle notes between active and archived states. -
Filter Notes
π Search by:- Status (Active/Archived)
- Categories
- Status and Categories at the same time
List and access notes' functionalities
backend
βββ cmd/
β βββ api/
β βββ main.go
β βββ routes.go
β βββ server.go
β βββ docs/
β βββ docs.go
β βββ swagger.json
β βββ swagger.yaml
β
βββ deploy/
β βββ prometheus.yml
β βββ grafana-config/
β β βββ grafana.ini
β βββ grafana-data/
β βββ prometheus-data/
β
βββ internal/
β βββ api/
β β βββ handlers/
β β βββ categories.go
β β βββ errors.go
β β βββ handlers.go
β β βββ middlewares.go
β β βββ notes.go
β β βββ ratelimiter.go
β β βββ types.go
β β βββ user.go
β β βββ metrics/
β β βββ prometheus.go
β βββ configs/
β β βββ configs.go
β βββ models/
β β βββ category.go
β β βββ note.go
β β βββ user.go
β βββ repositories/
β β βββ category.go
β β βββ interface.go
β β βββ note.go
β β βββ user.go
β βββ services/
β βββ category.go
β βββ note.go
β βββ user.go
β
βββ pkg/
β βββ date/
β β βββ date.go
β βββ request/
β β βββ json.go
β βββ response/
β β βββ json.go
β β βββ metrics.go
β βββ utils/
β β βββ auth.go
β β βββ helpers.go
β βββ validations/
β βββ errors.go
β
βββ scripts/
β βββ aws-scripts/
β βββ docker-compose-app.service
β βββ info.md
β
βββ .env
βββ .env.local
βββ docker-compose.yml
βββ Dockerfile
βββ go.mod
βββ go.sum
βββ package-lock.json
frontend
βββ public/
β βββ logo.png
β
βββ src/
β βββ App.css
β βββ App.jsx
β βββ index.css
β βββ main.jsx
β β
β βββ assets/
β β βββ bg-brown-1.png
β β βββ bg-brown.png
β β βββ bg-transparent.png
β β βββ bg.png
β β βββ logo.png
β β βββ logo_aux.png
β β βββ notes-2bg.jpg
β β βββ notes-bg.jpg
β β βββ react.svg
β β
β βββ components/
β β βββ toggle-theme.jsx
β β β
β β βββ Fallback/
β β β βββ Fallback.jsx
β β β
β β βββ Footer/
β β β βββ Footer.jsx
β β β
β β βββ GetStarted/
β β β βββ Register.jsx
β β β
β β βββ Header/
β β β βββ Header.jsx
β β β βββ LogoTitle.jsx
β β β βββ NavBar.jsx
β β β
β β βββ Landing.jsx/
β β β βββ Landing.jsx
β β β
β β βββ Loader/
β β β βββ Loader.jsx
β β β
β β βββ Login/
β β β βββ Login.jsx
β β β
β β βββ Note/
β β β βββ CreateNote.jsx
β β β βββ Note.jsx
β β β βββ Notes.jsx
β β β βββ UpdateNote.jsx
β β β
β β βββ Protect/
β β βββ ProtectedRoute.jsx
β β
β βββ config/
β β βββ axios.jsx
β β
β βββ context/
β βββ AuthContext.jsx
β βββ ThemeContext.jsx
β βββ toast-utils.jsx
β
βββ .env
βββ eslint.config.js
βββ index.html
βββ package-lock.json
βββ package.json
βββ postcss.config.js
βββ tailwind.config.js
βββ vite.config.js