Project Structure
The portfolio website follows Astro’s recommended project structure with custom organization for internationalization, components, and assets.Overview
The project is organized to separate concerns clearly:- Configuration files at the root
- Source code in
src/ - Static assets in
public/ - Build output in
dist/(generated)
Root Directory
Configuration Files
astro.config.mjs
astro.config.mjs
Purpose: Main Astro configuration fileContains:
- i18n setup (locales, routing)
- Integrations (Tailwind)
- Build optimizations (Vite/Terser)
astro.config.mjs:1tailwind.config.mjs
tailwind.config.mjs
Purpose: Tailwind CSS customizationContains:
- Custom color schemes (primary, accent)
- Custom animations (float, gradient, border-spin)
- Font family configuration
- Dark mode settings
tailwind.config.mjs:1package.json
package.json
Purpose: Project metadata and dependenciesKey Scripts:
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production build
- astro (^5.7.10)
- @astrojs/tailwind (^6.0.2)
- tailwindcss (^3.4.17)
- terser (^5.46.0)
package.json:1Source Directory (src/)
The src/ directory contains all application code:
Assets Directory
Stores images and media files that are processed by Astro’s asset pipeline
imgProfile.png- Profile picture used in Hero and About sections
- Automatic image optimization
- Type-safe imports
- Responsive image generation
Components Directory
Reusable Astro components for building the UI
.astro file:
About.astro
About section with education, experience, and certifications
CaseStudyCard.astro
Reusable card component for displaying case studies
Contact.astro
Contact section with email, LinkedIn, and GitHub links
Footer.astro
Site footer with copyright and attribution
Hero.astro
Hero section with greeting, name, role, and CTAs
LanguageSelector.astro
Language switcher for toggling between Spanish and English
Navbar.astro
Navigation bar with section links
Projects.astro
Projects and case studies showcase section
Skills.astro
Technical and soft skills display
ThemeToggle.astro
Dark/light mode toggle button
- All components use the i18n utilities for translations (src/i18n/utils.ts:251)
- Components are composed in page files (src/pages/*/index.astro)
- Styling uses Tailwind utility classes (tailwind.config.mjs:1)
i18n Directory
Internationalization utilities and translations
utils.ts
utils.ts
Purpose: Translation system implementationExports:
languages- Language configurationdefaultLang- Default language (‘es’)translations- All translation stringsTranslationKey- TypeScript type for keysgetLangFromUrl()- Extract language from URLuseTranslations()- Create translation functiongetLocalizedPath()- Generate localized URLs
src/i18n/utils.ts:1translations object with keys organized by section:
Layouts Directory
Page layout components that wrap page content
Layout.astro
Layout.astro
Purpose: Main layout wrapper for all pagesResponsibilities:Location:
- HTML document structure
<head>metadata and SEO- Global styles and scripts
- Dark mode initialization
- Common page wrapper
src/layouts/Layout.astro:1Pages Directory
File-based routing - each file becomes a route
- Imports the main
Layout - Imports section components (
Hero,About,Projects, etc.) - Detects language using
getLangFromUrl(Astro.url) - Passes language to components for translation
Public Directory
Static assets served as-is (not processed by build tools)
public/ are accessible at the root URL:
Files in
public/ are not processed or optimized. Use src/assets/ for images that need optimization.Build Output (dist/)
Generated directory containing the production build (not committed to Git)
npm run build
Contents:
- Optimized HTML files
- Minified CSS and JavaScript
- Processed assets
- Static files from
public/
dist/ directory is ready for deployment to:
- Vercel
- Netlify
- Cloudflare Pages
- Any static hosting service
File Naming Conventions
.astro files
Astro components and pages
Example:
Example:
Hero.astro, index.astro.ts files
TypeScript utilities and types
Example:
Example:
utils.ts, env.d.ts.mjs files
ES Module JavaScript config files
Example:
Example:
astro.config.mjs, tailwind.config.mjs.json files
JSON configuration and data
Example:
Example:
package.jsonImport Aliases
The project may use path aliases for cleaner imports:Check
tsconfig.json (if present) for path alias configuration.Development Workflow
Local Development
Production Build
Best Practices
Adding New Pages
To add a new page to the site:-
Create page files in both language directories:
-
Add translations to
src/i18n/utils.ts: -
Update navigation in
Navbar.astroif needed -
Test both languages:
/es/new-page/en/new-page