- π Quick Start
- ποΈ Architecture
- β¨ Features
- π Architecture Decision Records
- β‘ Tech Stack
- π οΈ Commands
- π¦ Packages & Services
- π Project Statistics
- π€ Contributing
- π Contact
IMPORTANT: Developers are strongly encouraged to use these commands to spin up their own local agentic development environment for this project. This is the recommended approach for any sort of agentic development work within the monorepo.
| Command | Description |
|---|---|
pnpm ai |
Starts/detects the server and opens the browser to the latest session |
pnpm ai --fresh |
Starts a fresh browser session |
pnpm ai "your prompt" |
Runs prompt asynchronously in the Web UI, continuing the last session |
pnpm ai --tui "your prompt" |
Runs prompt in the Terminal UI |
pnpm ai --native "your prompt" |
Runs prompt synchronously in the terminal |
pnpm ai --help |
Shows all available flags and options |
|
β |
Prerequisites |
# Ensure you have Node.js and pnpm installed
node --version # v18+ recommended
pnpm --version # v10.12.3|
β‘ |
Clone & Install |
git clone https://github.com/IEEE-Ritb-Website/ieee-ritb-suite.git
cd ieee-ritb-suite
pnpm install|
β’ |
Build Everything |
pnpm build-all # Nx-powered build with intelligent caching|
β£ |
Configure Environment |
cp .env.example .env
# Edit .env with your MongoDB URL and auth credentials|
β€ |
Start Developing |
# Backend service
cd services/backend/<service-name>
pnpm start
# Frontend app (with HMR)
cd services/frontend/<app-name>
pnpm devgraph TB
subgraph Packages["π¦ Packages"]
AL["π astralogger<br/><i>Pino Logger</i>"]
CLI["βοΈ astranova-cli<br/><i>Scaffolding Tool</i>"]
AI["π€ astranova-ai<br/><i>AI Assistant</i>"]
CAT["π catalogues<br/><i>Chapter Registry</i>"]
end
subgraph Backend["π₯οΈ Backend Services"]
ROOT["π root-service<br/><i>Core API</i>"]
ADMIN["π admin-service<br/><i>Auth & User Admin</i>"]
COMMON["π οΈ common-app-service<br/><i>Tools & URL Shortener</i>"]
FORM["π form-service<br/><i>Forms & Registration</i>"]
end
subgraph Clients["π Client SDKs"]
RC["@astranova/root-client"]
AC["@astranova/admin-client"]
CC["@astranova/common-app-client"]
end
subgraph Frontend["π¨ Frontend Apps"]
LAND["π landing-fe<br/><i>3D Landing Page</i>"]
LINKS["π ieee-links<br/><i>Chapter Showcase</i>"]
TOOLS["π§° common-app-fe<br/><i>Dev Tools</i>"]
PROFILE["π€ profile-fe<br/><i>User Dashboard</i>"]
end
subgraph Docs["π Documentation"]
ADR["π docs/adrs/<br/><i>Architecture Decisions</i>"]
end
Packages --> Backend
Packages --> Frontend
ROOT --> RC
ADMIN --> AC
COMMON --> CC
RC --> LAND
CC --> TOOLS
ieee-ritb-suite/
β
βββ π¦ packages/ # Shared libraries
β βββ π astralogger/ # Pino-based logging utility
β βββ βοΈ astranova-cli/ # Custom scaffolding CLI
β βββ π€ astranova-ai/ # Just runs OpenCode
β βββ π¦ astranova-core/ # Core environment and monorepo root helpers
β βββ π catalogues/ # IEEE chapter data registry (18 chapters)
β
βββ π shared-clients/ # Centralized API client singletons (with client-config.json)
β
βββ π§ services/
β β
β βββ π₯οΈ backend/ # Express.js microservices
β β βββ π admin-service/ # Auth & user administration
β β βββ π root-service/ # Core public API
β β βββ π οΈ common-app-service/ # Dev tools backend & URL shortener
β β βββ π form-service/ # Forms & event registration
β β
β βββ π¨ frontend/ # Vite + React frontends
β βββ π landing-fe/ # 3D landing page
β βββ π§° common-app-fe/ # Developer tools dashboard
β βββ π ieee-links/ # Chapter link showcase
β βββ π€ profile-fe/ # Next.js user dashboard
β
βββ π docs/
β βββ π adrs/ # Architecture Decision Records
β
βββ π scripting/ # CLI entry point
|
Custom CLI |
Scaffold new services instantly with |
|
Workspace Linking |
Shared packages auto-link via |
|
Nx Build Caching |
Intelligent builds that only rebuild what changed - dramatically faster CI/CD pipelines |
|
Unified Logging |
Shared Pino-based logger across all services via |
|
Chapter Registry |
Single source of truth for 18 IEEE chapters with Zod-validated schemas |
|
3D Landing Page |
Stunning Three.js + React Three Fiber powered landing with WebGL effects |
Architecture Decision Records (ADRs) are lightweight documents that capture important architectural decisions made during the project's development. Each ADR records a specific decision, its context, the options considered, and the rationale for the chosen approach.
Purpose: ADRs provide a historical record of why the project is built the way it is β helping current and future contributors understand the reasoning behind key choices without needing to rediscover or debate them again.
Location: docs/adrs/
| ADR | Title | Decision |
|---|---|---|
| ADR-001 | pnpm as Package Manager | Why pnpm was chosen over npm and Yarn |
| ADR-002 | Nx Build System | Why Nx was chosen for monorepo orchestration |
| ADR-003 | Monorepo Architecture | Why a monorepo structure was adopted |
| ADR-004 | React Hook Form with Zod | Why react-hook-form and Zod are used for form validation |
| ADR-005 | Cron Jobs for Backend Services | Why cron jobs are used (Render free tier constraints) |
| ADR-006 | CI/CD and Deployment Strategy | Deployment targets and pipeline choices |
| ADR-007 | Client SDK Pattern | Typed API client packages co-located with backend services |
| ADR-008 | Centralized Clients & Core Split | Instantiated client singletons in shared-clients and astranova-core entrypoints |
| Category | Technologies |
|---|---|
| ποΈ Build System | |
| π₯οΈ Backend | |
| π¨ Frontend | |
| π¬ 3D/Animation |
| Command | Description |
|---|---|
pnpm install |
Install all workspace dependencies |
pnpm build-all |
Build all packages and services with Nx caching |
| Command | Description |
|---|---|
pnpm rs create-be <name> |
Create new Express backend in services/backend/ |
pnpm rs create-fe <name> |
Create new Vite+React frontend in services/frontend/ |
The suite includes a project-local AI developer assistant wrapper (astranova-ai, aliased as ai) that calls OpenCode. It runs prompts in the Web UI (--web, default), Terminal UI (--tui), or headlessly in the terminal (--native).
| Command | Description |
|---|---|
pnpm ai |
Starts/detects the server and opens the browser to the latest session |
pnpm ai --fresh |
Starts a fresh browser session |
pnpm ai "your prompt" |
Runs prompt asynchronously in the Web UI, continuing the last session |
pnpm ai --fresh "your prompt" |
Runs prompt asynchronously in the Web UI in a fresh session |
pnpm ai --tui "your prompt" |
Runs prompt in the Terminal UI, continuing the last session |
pnpm ai --tui --fresh "your prompt" |
Runs prompt in the Terminal UI in a fresh session |
pnpm ai --native "your prompt" |
Runs prompt synchronously directly in the terminal, continuing the last session |
pnpm ai --native --fresh "your prompt" |
Runs prompt synchronously in the terminal as a fresh session |
cd services/backend/<service-name>| Command | Description |
|---|---|
pnpm start |
Run compiled code (node dist/index.js) |
pnpm run build |
TypeScript compile (tsc && tsc-alias) |
pnpm run lint |
Run ESLint |
cd services/frontend/<app-name>| Command | Description |
|---|---|
pnpm dev |
Vite dev server with HMR |
pnpm run build |
TypeScript + Vite production build |
pnpm run preview |
Preview production build |
pnpm run lint |
Run ESLint |
| Command | Description |
|---|---|
nx run-many --target=build --all |
Build all projects with caching |
nx graph |
Visualize dependency graph |
| Package | Description | Key Features |
|---|---|---|
| π astralogger | Pino-based logging utility | Singleton pattern, env-aware levels, astralogger.json config |
| βοΈ astranova-cli | Custom scaffolding tool | Generates Express/Vite apps with TypeScript, ESLint, Zod |
| π€ astranova-ai | Local AI developer assistant CLI wrapper | Terminal or Web UI execution modes, dynamic project-local binary resolution |
| π¦ astranova-core | Core environment and path helpers | Separate browser-safe and Node-only entrypoints, CommonJS compatible |
| π @astranova/catalogues | IEEE chapter data registry | Zod-validated schemas, 18 chapters (12 tech, 6 non-tech) |
| π shared-clients | Centralized instantiated clients | Singleton API client exports, client-config.json urls, local health checks |
| App | Description | Key Technologies |
|---|---|---|
| π landing-fe | 3D landing page | Three.js, React Three Fiber, Lenis |
| π§° common-app-fe | Developer tools dashboard | Radix UI, React Router, UUID/JSON/Hash generators |
| π ieee-links | Chapter link showcase | Framer Motion |
| π€ profile-fe | User dashboard & auth | Next.js 16, better-auth |
| Service | Description | Key Features |
|---|---|---|
| π admin-service | Auth & user admin | better-auth, Cloudinary, exports auth-client |
| π root-service | Core public API | Express v5, MongoDB, chapter catalogues |
| π οΈ common-app-service | Dev tools backend & URL shortener | REST APIs, ritb.in short URLs, cron endpoint |
| π form-service | Forms & event registration | Zod validation, MongoDB |
| Metric | Count |
|---|---|
| π¦ Shared Packages | 5 |
| π₯οΈ Backend Services | 4 |
| π¨ Frontend Apps | 4 |
| π ADR Documents | 8 |
We welcome contributions! Here's how to get started:
β Fork this repository
β‘ Clone your fork: git clone <your-fork-url>
β’ Create branch: git checkout -b feature-name
β£ Install: pnpm install (from root)
β€ Build: pnpm build-all
| Guideline | Description |
|---|---|
| Custom CLI | Use pnpm rs create-be/fe <name> to scaffold new services |
| Patterns | Follow existing patterns in services/backend/ or services/frontend/ |
| Architecture | Review docs/adrs/ before making architectural decisions |
| Shared Packages | Utilize astralogger and catalogues |
| Path Aliases | Use @/ prefix for imports: import { x } from "@/utils/x" |
| TypeScript | Maintain strict mode compliance |
β Test your changes thoroughly
β‘ Lint: pnpm run lint (in service directory)
β’ Build: Verify pnpm run build succeeds
β£ Commit: Follow conventional commits
β€ Push: git push origin feature-name
β₯ PR: Create pull request against main branch
β¦ Checks: Ensure all CI checks pass
For issues and feature requests, please open an issue