Skip to content

ColRuDev/portfolio

Repository files navigation

Portfolio

Personal portfolio website for Nicolas Colmenares — AI Engineer, built with Astro and powered by Sanity CMS.

Live site: colrudev-portfolio.netlify.app

About

A fast, statically-generated portfolio featuring a two-column layout with a fixed profile sidebar and scrollable content sections for experience, projects, education, certificates, and skills. All content is managed through Sanity CMS and the site ships with full internationalization support (English & Spanish).

Key Features

  • Headless CMS — Content (bio, experience, projects, education, certificates, skills) is fetched from Sanity at build time.
  • i18n — English (default) and Spanish locales with route-based switching (/ and /es/).
  • Dark / Light mode — Class-based theme toggle with localStorage persistence.
  • Design tokens — Custom light & dark color palettes defined through Tailwind CSS v4 @theme and OKLCH colors.
  • Type-safe — Strict TypeScript throughout, with dedicated interfaces for every CMS content type.
  • Code quality — ESLint, Prettier, Husky pre-commit hooks, lint-staged, and Commitlint (Conventional Commits).

Tech Stack

Category Technology
Framework Astro 6
Language TypeScript
Styling Tailwind CSS v4
CMS Sanity (via @sanity/astro)
Icons Astro Icon + Lucide
Hosting Netlify

Project Structure

src/
├── components/
│   ├── landing/      # Page sections (ProfileCard, Experience, Projects, …)
│   └── ui/           # Shared UI components (Header, Footer, ThemeToggle)
├── i18n/             # Translation dictionary & locale helpers
├── icons/            # SVG icon sets (general, logos, ui)
├── interfaces/       # TypeScript interfaces for CMS content types
├── layouts/          # Astro layouts
├── lib/sanity/       # Sanity client helpers (image URL builder, formatters)
├── pages/            # Route pages (en → /, es → /es/)
└── styles/           # Global CSS & design tokens

Getting Started

Prerequisites

Environment Variables

Create a .env file based on the example:

SANITY_PROJECT_ID=<your-sanity-project-id>
SANITY_DATASET=<your-sanity-dataset>

Installation

pnpm install

Dockerized Development

All development dependencies are isolated in Docker. No need to install Node, pnpm, or any global packages locally.

Prerequisite: Docker must be running and accessible without sudo.

Validate with:

docker ps

If you get a permission error, configure Docker to run without sudo:

sudo usermod -aG docker $USER
# Then log out and log back in

Start the development environment:

make up

This builds the Docker image and starts the dev server. All other commands are available in the Makefile.

Commands

Command Action
pnpm dev Start the development server at localhost:4321
pnpm build Type-check and build for production (./dist/)
pnpm preview Preview the production build locally
pnpm check Run Astro type checking
pnpm lint Lint the codebase with ESLint
pnpm lint:fix Auto-fix lint issues
pnpm format Format files with Prettier

Deployment

The site is deployed to Netlify with the following build configuration (see netlify.toml):

  • Build command: astro build
  • Publish directory: dist/
  • Node version: 24

Pushes that only touch non-source files (.agents/, .github/, .husky/, .vscode/) are automatically skipped via the Netlify ignore command.

License

This project is licensed under the MIT License.

About

Repository for NickEsColR portfolio

Resources

License

Stars

Watchers

Forks

Contributors