Personal Portfolio & Blog - datanarch.dev



Personal Portfolio & Blog - datanarch.dev

📋 Project Summary

Modern personal website built from scratch with Astro, designed to showcase professional projects, share technical knowledge through a blog, and present my professional trajectory interactively. The project implements a complete internationalization (i18n) system supporting Spanish, English, and French.

🎯 Project Objective

Create a professional online presence that serves as:

  • Project Portfolio: Showcasing technical work with detailed descriptions
  • Technical Blog: Platform to share learnings and tutorials
  • Interactive CV: Dynamic presentation of professional experience
  • Contact Point: Direct channel for professional opportunities

⚙️ Key Features

1. Multi-language System (i18n)

  • Complete support for 3 languages: Spanish (ES), English (EN), French (FR)
  • Translation system with JSON files
  • Automatic language detection by route
  • Translated content: navigation, static pages, and dynamic content
  • Localized routes: /es/, /en/, /fr/

2. Markdown Blog

  • Astro Content Collections system
  • Syntax highlighting with Material Ocean theme
  • Automatically calculated reading time
  • Post tagging and categorization
  • Language-based filtering
  • Individual pages with optimized SEO metadata

3. Projects Section

  • Visual cards with featured information
  • Project states: FINISHED, UNDER-CONSTRUCTION, IN-REVIEW
  • Direct links to GitHub repositories and live demos
  • Featured projects badge (featured)
  • Responsive grid adaptable to devices
  • Smart sorting (featured first, then by date)

4. Multilingual CV

  • Interactive work experience timeline
  • Education and certifications
  • Visualized core skills
  • Reusable components (TimeLineItem, SideBarCard)
  • Centralized data in JSON files per language

5. Design System

  • Custom CSS design tokens
  • Consistent color palette
  • Variables for spacing, typography, and radii
  • Fonts: IBM Plex Sans (text) and IBM Plex Mono (code)
  • Modular and reusable components

6. Scalable Architecture

  • Organized folder structure
  • Separation of content and presentation
  • Reusable Astro components
  • Shared utilities (i18n.ts, readingTime.ts)
  • Type-safe with TypeScript

🛠️ Technology Stack

Framework and Languages

  • Astro 4.x: Main framework (hybrid SSG/SSR)
  • TypeScript: Static typing for greater robustness
  • Markdown: Content format for blog and projects

Libraries and Tools

  • Astro Content Collections: Content management system
  • Zod: Schema validation
  • Shiki: Syntax highlighting for code blocks
  • js-yaml: Frontmatter parser

Styling

  • CSS Modules: Locally scoped styles
  • Design Tokens: Custom CSS variable system
  • Responsive Design: Mobile-first approach

DevOps

  • Git: Version control
  • GitHub: Repository and collaboration
  • npm: Dependency management

Content Collections with Zod

const projects = defineCollection({
  type: "content",
  schema: z.object({
    title: z.string(),
    description: z.string(),
    date: z.coerce.date(),
    tags: z.array(z.string()).optional(),
    git: z.string().url().optional(),
    demo: z.string().url().optional(),
    featured: z.boolean().default(false),
    projectStatus: z.enum(['UNDER-CONSTRUCTION', 'FINISHED', 'IN-REVIEW']),
    lang: z.enum(['es', 'en', 'fr']).default('es')
  })
});

Robust i18n System

export function useTranslations(lang: 'es' | 'en' | 'fr' = 'es') {
  return function t(key: string) {
    const keys = key.split('.');
    let value: any = translations[lang];
    for (const k of keys) {
      value = value?.[k];
    }
    return value || key;
  };
}

Language Detection by Route

export function getLanguageFromPath(currentPath: string) {
  if (currentPath.startsWith('/en')) return 'en';
  if (currentPath.startsWith('/fr')) return 'fr';
  return 'es';
}

📈 Development Methodology

Progressive Development by Phases

  1. Phase 1: Initial setup and basic content
  2. Phase 2: Projects system
  3. Phase 3: Multimedia components
  4. Phase 4: Theme switcher (dark/light) - Pending
  5. Phase 5: Basic i18n implementation ✅
  6. Phase 6: Advanced content i18n - In progress
  7. Phase 7: Social media automation - Planned

Applied Principles

  • DRY (Don’t Repeat Yourself): Reusable components
  • Separation of Concerns: Content separated from logic
  • Type Safety: TypeScript throughout the application
  • Progressive Enhancement: Works without JavaScript
  • Mobile First: Responsive design from the start

📚 Key Learnings

Technical

  • Astro Content Collections: Robust system for typed content
  • i18n without libraries: Custom internationalization implementation
  • CSS Architecture: Effective design tokens and CSS variables
  • TypeScript Patterns: Interfaces, types, and validation with Zod
  • Component Design: Creating modular and reusable components

Design

  • Balance between simplicity and functionality
  • Importance of visual consistency
  • Accessibility from the start
  • Performance first (SSG with Astro)

Process

  • Documentation as part of development
  • Incremental development by phases
  • Version control with descriptive commits
  • Thorough manual testing

🌟 Unique Features

  1. Triple Language from Core: Not an add-on, but a fundamental part of the architecture
  2. Type-Safe Content: Zod validates all content at build time
  3. Zero Client JS: Static generated site, ultra-fast
  4. Own Design System: No dependency on CSS frameworks
  5. Markdown-First: Portable and versionable content

📝 Project Metrics

  • Lines of code: ~3,500 LOC
  • Astro components: 12+
  • Pages generated: 20+ (with all language variants)
  • Blog posts: 12 (4 per language)
  • Documented projects: 3+
  • Supported languages: 3
  • Development time: 2 weeks
  • Performance: Lighthouse 95+ on all metrics

🎓 Use Cases

  1. Developer Seeking Employment: Complete portfolio with projects and experience
  2. Technical Blogger: Platform to share knowledge
  3. Freelance Consultant: Professional presence with direct contact
  4. Open Source Contributor: Showcase of contributions and projects

📄 License

Source code: MIT License Content: © 2025 Henry Pérez (datanarch)


Current status: Under active construction Last updated: October 2025 Author: Henry Pérez (@datanarch) Main Technology: Astro + TypeScript