Current version: 3.2.10
Personal website and portfolio built with Next.js, TypeScript, and Tailwind CSS. Content is sourced from Cosmic CMS; the site includes a blog, case studies, portfolio pages, and API routes for contact forms, license activation, and integrations.
Web luisalejandro.org · GitHub @LuisAlejandro · Twitter @LuisAlejandro
- Framework: Next.js 16 (App Router), React 19, TypeScript
- Styling: Tailwind CSS 4, Sass
- Content: Cosmic CMS (
@cosmicjs/sdk) - Monitoring: Sentry (
@sentry/nextjs) - Package manager: npm (
package-lock.json; Docker and local workflows)
- Portfolio, blog, and case-study pages with Cosmic-backed content
- Contact form with reCAPTCHA, AWS SES, Mailchimp, and Google Sheets integrations
- License activation APIs for Wholmaster and Gymcontrol apps
- Disqus comments, analytics, agent discovery surfaces, and on-demand revalidation API routes
Copy environment variables and fill in secrets (Cosmic CMS keys are required for content pages):
cp .env.example .envBuild and start the Docker development environment:
make image
make dependencies
make serveThe app runs at http://localhost:3101.
Use make console for a shell inside the app container.
| Command | Description |
|---|---|
make serve |
Start the Next.js dev server in Docker |
make build |
Production build inside the container |
make lint |
Run ESLint (npm run lint) |
make format |
Run Prettier (npm run format) |
make test |
Run TypeScript type check (npm run type-check) |
make console |
Open a shell in the app container |
make dependencies |
npm ci inside the app container |
Docker lifecycle: make image, make start, make stop, make down, make destroy, make cataplum. See make help for release targets.
make lint
make format
make testRelease preflight runs image → dependencies → build → format → lint → test via make release-preflight before tagging.
Pull requests to develop run a Docker build and production build plus a Semgrep Code Quality job in .github/workflows/pr.yml. Auto-approve and merge run in .github/workflows/pr-auto-merge.yml after the Pull Request workflow succeeds.
Release workflows are documented in MAINTAINER.md. Changelog entries are written to HISTORY.md.