Everato is a comprehensive event management platform built with a decoupled architecture consisting of a Go backend API and a React frontend. It provides a complete solution for event creation, management, ticketing, and analytics with an interactive, modern user interface.
Everato combines a powerful Go backend API with a modern React frontend to create a cohesive platform that handles everything from event creation to analytics, ticketing systems, payment processing, and administration through an interactive, responsive interface.
- Decoupled Architecture: Clean separation between Go backend API and React frontend.
- Single Page Application: Fast, interactive UI with client-side routing and state management.
- Event Management: Create, update, and manage events with customizable fields.
- Ticketing System: Flexible ticket types, pricing tiers, and inventory management.
- User Management: Comprehensive user registration, authentication, and profile management.
- Analytics Dashboard: Real-time insights into event performance, attendance, and revenue.
- Payment Processing: Secure payment handling with multiple provider options.
- Email Notifications: Automated confirmations, reminders, and marketing communications.
- QR Code Generation: Secure ticket validation through unique QR codes.
- API-First Design: Clean separation of concerns with RESTful API endpoints.
- React Frontend: Interactive single-page application with client-side routing.
- Event Bus: Internal event processing using Kafka for reliable asynchronous operations.
- Database Integration: Direct PostgreSQL connectivity with migration tooling.
- Comprehensive Logging: Structured logging for monitoring and debugging.
- Observability Stack: Prometheus, Grafana, Loki, and Promtail for complete system visibility.
- Backend: Go with modern frameworks and libraries
- Database: PostgreSQL with pgx driver
- ORM/Query: SQLC for type-safe SQL
- Messaging: Kafka & Zookeeper
- Frontend: React with TypeScript
- UI Framework: TailwindCSS for styling
- Build Tool: Vite for fast development and optimized builds
- Authentication: JWT-based authentication
- Development: Docker for local development environment, Air for hot reloading
- Go 1.24+
- PostgreSQL 15+
- Docker and Docker Compose (for development environment)
- Make (for running development commands)
- Node.js and npm/pnpm (for TailwindCSS compilation)
-
Clone the repository:
git clone https://github.com/yourusername/everato.git cd everato -
Set up environment variables:
cp .env.example .env # Edit .env file with your configuration
```
make db
```
-
Start the logging stack (optional):
make logsThis starts Prometheus, Grafana, Loki, and Promtail for monitoring and observability.
- Grafana: http://localhost:3000 (default login: admin/admin)
- Prometheus: http://localhost:9090
- Loki: http://localhost:3100
-
Run migrations:
make migrate-up -
Run the backend application:
# For development with hot reload make dev # For production build make build ./bin/everato -
Run the React frontend:
# Navigate to frontend directory cd www # Install dependencies pnpm install # Start development server pnpm dev
make build
make test
# Create a new migration
make migrate-new
# Apply migrations
make migrate-up
# Roll back a migration
make migrate-down
# Seed the database with sample data
make seed
Everato follows a well-organized directory structure that separates concerns and promotes maintainability:
everato/
├── assets/ # Project assets like architecture diagrams
├── config/ # Configuration management
├── docker/ # Docker-related files for development
│ ├── init/ # Database initialization scripts
│ ├── Dockerfile # Production Docker image definition
│ ├── prometheus.yml # Prometheus configuration
│ └── promtail-config.yaml # Promtail configuration
├── docs/ # Project documentation
│ ├── ARCHITECTURE.md # System architecture documentation
│ └── FRONTEND.md # Frontend implementation details
├── internal/ # Private application code
│ ├── db/ # Database-related code
│ │ ├── migrations/ # SQL migration files
│ │ ├── queries/ # SQLC query definitions
│ │ ├── repository/ # Generated database access code (auto-generated)
│ │ └── seed/ # Database seeding utilities
│ ├── handlers/ # HTTP request handlers
│ │ ├── handler_interface.go # Common interface for all handlers
│ │ └── v1/ # API version 1 handlers
│ │ └── api/ # REST API endpoints
│ ├── middlewares/ # HTTP middleware components
│ │ ├── authguard_middleware.go # Authentication middleware
│ │ ├── cors_middleware.go # CORS handling
│ │ ├── logger_middleware.go # Request logging
│ │ ├── requestid_middleware.go # Request ID generation
│ │ └── timeout_middleware.go # Request timeout handling
│ ├── services/ # Business logic
│ │ ├── event/ # Event-related services
│ │ ├── mailer/ # Email notification services
│ │ └── user/ # User management services
│ └── utils/ # Utility functions
│ ├── handler_utils.go # Handler utilities
│ ├── http_utils.go # HTTP utilities
│ └── utils.go # General utilities
├── pkg/ # Shared public libraries
│ ├── jwt.go # JWT handling
│ ├── logger.go # Application logger
│ └── template.go # Template utilities
├── public/ # Static assets (served directly)
├── scripts/ # Utility scripts for database management
├── templates/ # Email templates
│ └── mail/ # Email templates
└── www/ # React frontend application
├── public/ # Static frontend assets
└── src/ # React source code
├── assets/ # Frontend assets
├── components/ # React components
├── pages/ # Page components
├── app.tsx # Main application component
├── routes.tsx # React Router configuration
└── main.tsx # Application entry point
main.go- Application entry pointserver.go- HTTP server implementationmigrations_dev.go/migrations_prod.go- Database migration handlingembedded_fs.go/live_fs.go- File system handling (dev vs prod).env- Environment variables (not committed to git)config.yaml- Application configurationMakefile- Development and build commands.air.toml- Configuration for hot reloadingwww/src/main.tsx- React application entry pointwww/src/routes.tsx- React Router configuration
config/config.go- Loads and manages application configuration.env&.env.example- Environment variables for local developmentconfig.yaml- External configuration for deployment settings
internal/db/migrations/*.sql- Database schema definitionsinternal/db/queries/*.sql- SQLC query definitionsinternal/db/repository/*.go- Generated database access codesqlc.yaml- SQLC code generation configuration
internal/handlers/v1/api/*.go- REST API handlersinternal/middlewares/*.go- HTTP middleware componentsinternal/services/*.go- Business logic implementation
www/src/components/*.tsx- Reusable React componentswww/src/pages/*.tsx- React page componentswww/src/routes.tsx- React Router configuration
www/src/index.css- Global CSS with Tailwind importswww/public/- Static assets for the frontendwww/src/assets/- Assets processed through Vite
-
Local Setup
- Copy
.env.exampleto.envand configure values - Install dependencies with
make install- This installs: SQLC, golangci-lint, Air, TailwindCSS, golang-migrate, and templ
- Start the database with
make db - Start the logging stack with
make logs(optional) - Apply migrations with
make migrate-up
- Copy
-
Development Cycle
- Run the backend with hot reloading:
make dev - Run the frontend development server:
cd www && pnpm dev - Create database migrations:
make migrate-new - Seed test data:
make seed - Format code:
make fmt - Lint code:
make lint
- Run the backend with hot reloading:
-
Code Organization Principles
- Business logic lives in
internal/services/ - HTTP handlers only handle request/response, delegating to services
- Database queries are defined in SQL and generated with SQLC
- React components in
www/src/components/and pages inwww/src/pages/ - Configuration is loaded from both environment variables and config files
- DTOs (Data Transfer Objects) handle data validation and transformation
- Structured logging for traceability and monitoring
- Middleware-based HTTP request processing
- Business logic lives in
-
Build Modes
- Backend Development Mode: Uses file system directly for live reloading
- Build with
-tags=devflag - Reads templates and migrations from disk
- Enables hot reloading via Air
- Build with
- Backend Production Mode: Embeds static assets into binary
- Build without tags for a self-contained binary
- Templates and migrations embedded in executable
- Frontend Development Mode:
- Vite dev server with hot module replacement
- Proxies API requests to backend
- Frontend Production Mode:
- Built with
pnpm buildto generate optimized static assets - Served by the Go backend in production
- Built with
- Backend Development Mode: Uses file system directly for live reloading
-
API Structure
- REST API endpoints under
/api/v1/ - Authentication via JWT (stored in HTTP-only cookies)
- Structured error responses with request IDs for traceability
- Routes grouped by domain (auth, events, users, etc.)
- Handler interface pattern for consistent route registration
- Response formatting with custom HttpWriter utility
- OpenAPI/Swagger documentation (planned)
- Prometheus metrics for performance monitoring
- REST API endpoints under
-
Monitoring & Observability
- Prometheus metrics collection for application performance
- Grafana dashboards for visualization (http://localhost:3000)
- Loki for log aggregation
- Promtail for log shipping
- Request IDs for cross-service traceability
- Structured JSON logging with different log levels
- Logging stack can be started with
make logs - All components are configured in docker-compose.yaml
-
Testing
- Unit tests:
make test - Integration tests use real database connections
- Logging and metrics for performance analysis
- Unit tests:
Everato can be deployed as a backend binary with frontend static assets:
-
Build for production:
make build cd www && pnpm build -
Copy the binary, configuration file, and frontend build to your server:
scp -r bin/everato config.yaml www/dist/ user@your-server:/path/to/deployment/ -
Run the application:
./everato -config config.yaml
The backend will serve the React frontend static files alongside the API endpoints.
Contributions are welcome! Please read our CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
This project is copyright (c) 2025 Piush Bose. All rights reserved.
This source code is made publicly visible for portfolio and educational purposes only. You are not permitted to copy, distribute, modify, or use this code or any part of it without explicit written permission from the author - see the LICENSE file for details.
