A monorepo platform combining a developer-focused technical blog with interactive hands-on labs.
Domain: works-on-my.cloud
Akasha Lekha is a comprehensive learning platform for developers:
- Blog - Technical articles and series on AWS, DevOps, and cloud engineering
- Labs - Interactive, hands-on exercises with CLI verification and progress tracking
# Install dependencies
pnpm install
# Start everything for development
pnpm dev:all
# Or run individually:
pnpm dev # Blog only (apps/web)
pnpm dev:api # API only (SST dev mode)akasha-lekha/
├── apps/
│ └── web/ # Astro blog + labs frontend
├── packages/
│ ├── api/ # Lambda functions (auth, exercises, progress)
│ ├── types/ # Shared TypeScript types
│ └── db/ # Database utilities (planned)
├── infra/ # SST infrastructure definitions
│ ├── api.ts # API Gateway routes
│ ├── auth.ts # Secrets configuration
│ └── database.ts # DynamoDB tables
├── .readme/ # Project documentation
│ ├── architecture/ # Architecture docs
│ └── sst-api-development.md # SST development guide
├── sst.config.ts # SST configuration
├── docker-compose.yml # Local DynamoDB
└── pnpm-workspace.yaml # Monorepo configuration
| Document | Description |
|---|---|
| Architecture Overview | High-level system architecture |
| Blog Setup | Astro blog configuration and content creation |
| Labs Platform | Interactive labs system |
| Backend (SST) | API and infrastructure |
| CI/CD Workflows | GitHub Actions pipelines |
| SST Development Guide | Detailed SST API development reference |
| Layer | Technology |
|---|---|
| Frontend | Astro 5.x, Solid.js, Tailwind CSS v4 |
| Backend | SST v3, AWS Lambda, API Gateway |
| Database | DynamoDB (single-table design) |
| Auth | GitHub OAuth, JWT |
| Infrastructure | AWS (ap-south-1), Cloudflare Pages |
| CI/CD | GitHub Actions |
- Node.js 20+
- pnpm 10+
- Docker (for local DynamoDB)
- AWS CLI configured (for SST deployment)
# 1. Clone and install
git clone <repo-url>
cd akasha-lekha
pnpm install
# 2. Start local DynamoDB
pnpm db:local
# 3. Start development
pnpm dev:all| Script | Description |
|---|---|
pnpm dev |
Start blog dev server |
pnpm dev:api |
Start SST dev mode |
pnpm dev:all |
Start both concurrently |
pnpm build |
Build blog for production |
pnpm test |
Run all tests |
pnpm typecheck |
Type check all packages |
pnpm db:local |
Start local DynamoDB |
pnpm db:local:stop |
Stop local DynamoDB |
# Development
pnpm sst dev # Live Lambda development
pnpm sst dev --stage preview # Specific stage
# Deployment
pnpm sst deploy --stage preview # Deploy to preview
pnpm sst deploy --stage prod # Deploy to production
# Secrets
pnpm sst secret set KEY value --stage preview
pnpm sst secret list --stage preview
# Outputs
pnpm sst output --stage preview # View API URL, table namesThe blog deploys automatically via GitHub Actions:
- Preview: Every PR gets a preview deployment
- Production: Merges to
maindeploy to production
# Preview environment
pnpm sst deploy --stage preview
# Production environment
pnpm sst deploy --stage prodGitHub (Repository Secrets):
CLOUDFLARE_API_TOKEN- For Pages deploymentCLOUDFLARE_ACCOUNT_ID- Cloudflare account
SST (per stage):
pnpm sst secret set GithubClientId <value> --stage <stage>
pnpm sst secret set GithubClientSecret <value> --stage <stage>
pnpm sst secret set JwtSecret <value> --stage <stage>- Create a feature branch:
git checkout -b feat/your-feature - Make changes and commit (pre-commit hooks run automatically)
- Push and create a PR
- Preview deployment is created automatically
- After review, merge to
mainfor production deployment
The following checks run on every commit:
- ESLint - Code linting
- Prettier - Code formatting
- TypeScript - Type checking
- Build verification
To bypass in emergencies: git commit --no-verify -m "message"
Private project.