Skip to content

🌍 My personal website, my portfolio, and my blog. πŸš€ Built and powered by Nuxt Stack (Content, Hub, Studio, UI) & Nitro

License

Notifications You must be signed in to change notification settings

ArthurDanjou/artsite

Repository files navigation

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

Nuxt.js Vue.js TypeScript TailwindCSS Cloudflare

🌐 Live Demo | πŸ› 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:

# GitHub Studio Integration (for content management)
STUDIO_GITHUB_CLIENT_ID=your_github_client_id
STUDIO_GITHUB_CLIENT_SECRET=your_github_client_secret  # Keep this secret! Never commit to version control

# Discord Integration (runtime config - keep private)
NUXT_DISCORD_USER_ID=your_discord_user_id  # Private

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

# 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.

Security: Never commit your .env file or expose sensitive credentials like STUDIO_GITHUB_CLIENT_SECRET. Keep all API keys and secrets secure.

πŸ“‚ 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
β”‚   β”œβ”€β”€ 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.config.ts        # App configuration
β”‚   β”œβ”€β”€ app.vue              # Root app component
β”‚   └── error.vue            # Error page
β”œβ”€β”€ content/                 # Content files (Markdown & JSON)
β”‚   β”œβ”€β”€ education/           # Education content
β”‚   β”‚   β”œβ”€β”€ bachelor.md      # Bachelor's degree information
β”‚   β”‚   β”œβ”€β”€ m1.md            # Master's 1st year information
β”‚   β”‚   └── m2.md            # Master's 2nd year information
β”‚   β”œβ”€β”€ experiences/         # Professional experience content
β”‚   β”‚   β”œβ”€β”€ artdanjproduction.md
β”‚   β”‚   β”œβ”€β”€ erisium.md
β”‚   β”‚   β”œβ”€β”€ hackathon-cnd.md
β”‚   β”‚   β”œβ”€β”€ picard.md
β”‚   β”‚   └── sevetys.md
β”‚   β”œβ”€β”€ projects/            # Project portfolio content
β”‚   β”‚   β”œβ”€β”€ artchat.md
β”‚   β”‚   β”œβ”€β”€ arthome.md
β”‚   β”‚   β”œβ”€β”€ artlab.md
β”‚   β”‚   β”œβ”€β”€ artstudies.md
β”‚   β”‚   β”œβ”€β”€ bikes-glm.md
β”‚   β”‚   β”œβ”€β”€ breast-cancer.md
β”‚   β”‚   β”œβ”€β”€ dropout-reduces-underfitting.md
β”‚   β”‚   β”œβ”€β”€ loan-ml.md
β”‚   β”‚   β”œβ”€β”€ monte-carlo-project.md
β”‚   β”‚   β”œβ”€β”€ schelling-segregation-model.md
β”‚   β”‚   └── sevetys.md
β”‚   β”œβ”€β”€ contact.json         # Contact information data
β”‚   β”œβ”€β”€ hobbies.md           # Hobbies page content
β”‚   β”œβ”€β”€ index.md             # Home page content
β”‚   β”œβ”€β”€ languages.json       # Programming languages data
β”‚   β”œβ”€β”€ skills.json          # Skills and expertise data
β”‚   └── uses.md              # Tools and software used
β”œβ”€β”€ public/                  # Public static files
β”œβ”€β”€ server/                  # Server API routes and middleware
β”‚   β”œβ”€β”€ api/                 # API endpoints
β”‚   └── routes/              # Server routes
β”œβ”€β”€ types/                   # TypeScript type definitions
β”œβ”€β”€ .env.example             # Example environment variables
β”œβ”€β”€ 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

About

🌍 My personal website, my portfolio, and my blog. πŸš€ Built and powered by Nuxt Stack (Content, Hub, Studio, UI) & Nitro

Topics

Resources

License

Stars

Watchers

Forks

Contributors 6