Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

162 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Header

React Vite TypeScript Tailwind Three.js

MongoDB pnpm Nx


πŸ“‹ Table of Contents


πŸ€– Agentic Development Setup

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

πŸš€ Quick Start

β‘ 

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 dev

(back to top)


πŸ›οΈ Architecture

System Overview

graph 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
Loading

Directory Structure

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

(back to top)


✨ Features

πŸ› οΈ

Custom CLI

Scaffold new services instantly with pnpm rs create-be/fe - generates TypeScript, ESLint, Zod, and all configs automatically

πŸ”—

Workspace Linking

Shared packages auto-link via workspace:* protocol - no manual linking or publishing required

⚑

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 astralogger package with environment-aware levels

πŸ“š

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

(back to top)


πŸ“– Architecture Decision Records

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

(back to top)


⚑ Tech Stack

Category Technologies
πŸ—οΈ Build System

pnpm Nx TypeScript

πŸ–₯️ Backend

Node.js Express MongoDB Zod

🎨 Frontend

React Vite Tailwind Radix

🎬 3D/Animation

Three.js R3F Framer

(back to top)


πŸ› οΈ Commands

πŸ“₯ Setup & Installation

Command Description
pnpm install Install all workspace dependencies
pnpm build-all Build all packages and services with Nx caching

πŸ†• Scaffolding New Services

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/

πŸ€– AI Command Assistant (astranova-ai)

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

πŸ–₯️ Backend Development

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

🎨 Frontend Development

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

πŸ“Š Nx Operations

Command Description
nx run-many --target=build --all Build all projects with caching
nx graph Visualize dependency graph

(back to top)


πŸ“¦ Packages & Services

Shared Packages

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

Frontend Applications

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

Backend Services

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

(back to top)


πŸ“Š Project Statistics

Metric Count
πŸ“¦ Shared Packages 5
πŸ–₯️ Backend Services 4
🎨 Frontend Apps 4
πŸ“– ADR Documents 8

🀝 Contributing

We welcome contributions! Here's how to get started:

πŸ”§ Setup

β‘  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

πŸ’» Development Guidelines

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

πŸ“€ Submitting

β‘  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

(back to top)


πŸ“ž Contact

Maintained by Shivesh & Ahad

For issues and feature requests, please open an issue


Built with ❀️ by IEEE RIT Bangalore

Star History Chart

Footer

About

Resources

Stars

2 stars

Watchers

0 watching

Forks

Used by

Contributors

Languages