2025-12-23 23:13:42 +00:00

Arthur Danjou | Portfolio 2024

My professional portfolio built with modern Nuxt.js technologies, showcasing projects, skills, and experience.

Nuxt.js Vue.js TypeScript TailwindCSS Cloudflare

🌐 Live Demo | 📖 Documentation | 🐛 Report Bug

📋 Table of Contents

Features

  • Responsive Design - Fully responsive layout that works on all devices
  • i18n Support - Multilanguage content with Nuxt i18n
  • Content Management - Easy content editing with Nuxt Content and Nuxt Studio
  • Modern Styling - Beautiful UI built with Tailwind CSS and SASS
  • Performance Optimized - Fast loading times and SEO optimized
  • Analytics - WakaTime integration to track coding statistics
  • Discord Integration - Real-time Discord status display
  • CI/CD - Automated deployment with NuxtHub

⚒️ Tech Stack

📦 Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js (v18 or higher recommended)
  • Bun (latest version) - Install Bun
  • Git for version control
  • Cloudflare Account (for deployment)

🚀 Getting Started

  1. Clone the repository

    git clone https://github.com/ArthurDanjou/artsite.git
    cd artsite
    
  2. Install dependencies

    bun install
    
  3. Set up environment variables

    cp .env.example .env
    

    Then edit .env and fill in your configuration values (see Environment Variables section).

  4. Start the development server

    bun run dev
    

    The application will be available at http://localhost:3000 🎉

💻 Development

Available Scripts

# Start development server
bun run dev

# Build for production
bun run build

# Preview production build locally
bun run preview

# Lint code
bun run lint

# Deploy to Cloudflare
bun run deploy

# Generate Cloudflare types
bun run cf-typegen

Project Configuration

The project uses:

  • ESLint for code linting with stylistic rules (single quotes, no trailing commas)
  • TypeScript for type safety
  • Nuxt DevTools enabled for enhanced development experience

🔐 Environment Variables

Create a .env file in the root directory with the following variables:

# Base URL for internationalization
NUXT_PUBLIC_I18N_BASE_URL=https://arthurdanjou.fr

# API URL (if applicable)
NUXT_API_URL=

# GitHub Studio Integration (for content management)
STUDIO_GITHUB_CLIENT_ID=your_github_client_id
STUDIO_GITHUB_CLIENT_SECRET=your_github_client_secret

# Discord Integration (runtime config)
NUXT_DISCORD_USER_ID=your_discord_user_id
NUXT_DISCORD_ID=your_discord_app_id

# WakaTime Integration (for coding statistics)
NUXT_WAKATIME_USER_ID=your_wakatime_user_id
NUXT_WAKATIME_CODING=your_coding_stats_api
NUXT_WAKATIME_EDITORS=your_editors_stats_api
NUXT_WAKATIME_LANGUAGES=your_languages_stats_api
NUXT_WAKATIME_OS=your_os_stats_api

# Status Page URL
NUXT_STATUS_PAGE=your_status_page_url

Note: Not all variables are required for basic development. The site will work without integrations, but some features may be disabled.

📂 Project Structure

artsite/
├── app/                     # Application source code
│   ├── assets/              # Static assets (CSS, images)
│   ├── components/          # Vue components
│   │   ├── content/         # Content-specific components
│   │   └── home/            # Home page components
│   ├── composables/         # Vue composables
│   ├── layouts/             # Page layouts
│   ├── pages/               # Application pages (file-based routing)
│   │   ├── index.vue        # Home page
│   │   ├── projects/        # Projects section
│   │   ├── hobbies.vue      # Hobbies page
│   │   ├── uses.vue         # Uses page
│   │   └── ecosystem.vue    # Ecosystem page
│   ├── app.vue              # Root app component
│   └── error.vue            # Error page
├── content/                 # Content files (Markdown)
│   ├── education/           # Education content
│   ├── experiences/         # Experience content
│   └── projects/            # Project content
├── public/                  # Public static files
├── server/                  # Server API routes and middleware
│   ├── api/                 # API endpoints
│   └── database/            # Database schemas and migrations
├── types/                   # TypeScript type definitions
├── .env.example             # Example environment variables
├── app.config.ts            # App configuration
├── content.config.ts        # Content module configuration
├── nuxt.config.ts           # Nuxt configuration
├── package.json             # Dependencies and scripts
├── tsconfig.json            # TypeScript configuration
├── wrangler.jsonc           # Cloudflare Workers configuration
└── README.md                # Project documentation

🔌 Integrations

  • WakaTime - Track coding time and statistics
  • Discord - Display real-time Discord status
  • Nuxt Studio - Headless CMS for content management
  • Nuxt i18n - Internationalization support
  • NuxtHub - CI/CD and deployment platform
  • Cloudflare D1 - Serverless SQL database

🚢 Deployment

This project is configured to deploy on Cloudflare using NuxtHub.

Deploy to Production

  1. Prerequisites

    • Cloudflare account
    • Wrangler CLI configured (wrangler login)
    • NuxtHub project created
  2. Deploy

    bun run deploy
    

    This will:

    • Generate Cloudflare types
    • Build the application
    • Deploy to Cloudflare Workers

Automatic Deployments

The project is set up with NuxtHub for automatic deployments on push to the main branch.

🤝 Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch
    git checkout -b feature/amazing-feature
    
  3. Make your changes
  4. Commit your changes
    git commit -m 'Add some amazing feature'
    
  5. Push to the branch
    git push origin feature/amazing-feature
    
  6. Open a Pull Request

Development Guidelines

  • Follow the existing code style (enforced by ESLint)
  • Use TypeScript for type safety
  • Write descriptive commit messages
  • Test your changes locally before submitting
  • Update documentation if needed

📄 License

MIT © Arthur Danjou

📬 Contact

Description
No description provided
Readme MIT 56 MiB
Languages
Vue 75.9%
TypeScript 22.7%
CSS 1.2%
JavaScript 0.2%