diff --git a/LICENSE b/LICENSE index a869d87..da7b345 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Arthur Danjou +Copyright (c) 2025 Arthur Danjou Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 4566646..8799170 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,9 @@ My professional portfolio built with modern Nuxt.js technologies, showcasing pro - [Features](#-features) - [Tech Stack](#️-tech-stack) - [Project Structure](#-project-structure) -- [Development](#-development) - - [Prerequisites](#prerequisites) - - [Installation](#installation) - - [Configuration](#configuration) - - [Running Locally](#running-locally) - - [Deployment](#deployment) - [Adding Content](#-adding-content) - - [Portfolio Projects](#portfolio-projects) + - [Projects](#projects) + - [Writings](#writings) - [Uses Page](#uses-page) - [Integrations](#-integrations) - [License](#-license) @@ -54,6 +49,11 @@ My professional portfolio built with modern Nuxt.js technologies, showcasing pro - **Styling** → [Sass](https://sass-lang.com/) & [Tailwind CSS](https://tailwindcss.com/) - **Package Manager** → [pnpm](https://pnpm.io/) - **Internationalization** → [Nuxt i18n](https://i18n.nuxtjs.org/) +- **Database ORM** → [Drizzle](https://orm.drizzle.team/) +- **Composables** → [VueUse](https://vueuse.org/) +- **Validation** → [Zod](https://zod.dev/) +- **Globe Visualization** → [Cobe](https://github.com/shuding/cobe) +- **Icons** → [Iconify](https://iconify.design/) ## 📂 Project Structure @@ -61,12 +61,14 @@ My professional portfolio built with modern Nuxt.js technologies, showcasing pro ├── assets/ # Static assets like global styles ├── components/ # Vue components ├── content/ # Markdown content for the portfolio -│ ├── portfolio/ # Portfolio projects +│ ├── projects/ # Portfolio projects +│ ├── writings/ # Writings │ └── uses/ # Uses page items ├── layouts/ # Page layouts ├── pages/ # Application pages ├── public/ # Public static files -│ └── portfolio/ # Portfolio images +│ ├── projects/ # Projects images +│ └── writings/ # Writings images ├── server/ # Server API routes ├── utils/ # Utility functions ├── .env.example # Example environment variables @@ -75,88 +77,24 @@ My professional portfolio built with modern Nuxt.js technologies, showcasing pro └── README.md # Project documentation ``` -## 🚀 Development - -### Prerequisites - -- [Node.js](https://nodejs.org/) (v16 or later) -- [pnpm](https://pnpm.io/) (v7 or later) - -### Installation - -```bash -# Clone the repository -git clone https://github.com/yourusername/portfolio-2024.git -cd portfolio-2024 - -# Install dependencies (with hoisting for Nuxt 3 compatibility) -pnpm i --shamefully-hoist -``` - -### Configuration - -Create a `.env` file in the root directory with the following variables: - -```env -# WakaTime Integration -NUXT_WAKATIME_USER_ID=your_wakatime_user_id -NUXT_WAKATIME_CODING=your_wakatime_coding_endpoint -NUXT_WAKATIME_LANGUAGES=your_wakatime_languages_endpoint -NUXT_WAKATIME_OS=your_wakatime_os_endpoint -NUXT_WAKATIME_EDITORS=your_wakatime_editors_endpoint - -# SEO -NUXT_PUBLIC_SITE_URL=https://your-domain.com - -# Nuxt Hub Deployment -NUXT_HUB_PROJECT_KEY=your_nuxt_hub_project_key - -# Discord Integration -NUXT_DISCORD_ID=your_discord_app_id -NUXT_DISCORD_TOKEN=your_discord_token -NUXT_DISCORD_USER_ID=your_discord_user_id - -# Cloud Files -NUXT_PUBLIC_CLOUD_RESUME=https://link-to-your-resume.pdf - -# Internationalization -NUXT_PUBLIC_I18N_BASE_URL=https://your-domain.com -``` - -### Running Locally - -```bash -# Start development server -pnpm dev - -# Build for production -pnpm build - -# Preview production build -pnpm preview -``` - -### Deployment - -The portfolio is configured to deploy automatically using NuxtHub. Push changes to your main branch to trigger a deployment. - ## 🍱 Adding Content -### Portfolio Projects +### Projects -1. Create a new `.md` file in the `/content/portfolio/` directory +1. Create a new `.md` file in the `/content/projects/` directory 2. Follow the structure of existing projects: ```md --- +--- +slug: project-slug title: Project Title -description: Brief description of the project -date: 2023-01-01 -img: /portfolio/project-image.png -tags: [tag1, tag2, tag3] -links: - website: https://project-url.com - github: https://github.com/user/repo +description: A brief description of the project +publishedAt: YYYY/MM/DD +readingTime: 1 +cover: project-slug/cover.png +tags: + - web --- ## Project content goes here @@ -164,20 +102,48 @@ links: Detailed description and information about the project. ``` -3. Add related project images to `/public/portfolio/` +3. Add related project images to `/public/projects/project-slug/` + +### Writings + +1. Create a new `.md` file in the `/content/writings/` directory +2. Follow the structure of existing projects: + +```md +--- +slug: article-slug +title: The title of the article +description: A brief description of the article +readingTime: 1 +publishedAt: YYYY/MM/DD +cover: article-slug/cover.png +tags: + - tag1 + - tag2 + - tag3 +--- + +## Writing content goes here + +Detailed description and information about the article. +``` + +3. Add related writing images to `/public/writings/article-slug/` ### Uses Page Add new items to the `/content/uses/` directory following the existing pattern: -```md ---- -category: Category Name -items: - - name: Item Name - description: Item description - link: https://item-url.com ---- +```json +{ + "name": "Name of the item", + "description": { + "en": "Item description in English", + "fr": "Item description in French", + "es": "Item description in Spanish" + }, + "category": "Item category name" +} ``` ## 🔌 Integrations diff --git a/app/app.vue b/app/app.vue index e28b5df..696d33f 100644 --- a/app/app.vue +++ b/app/app.vue @@ -1,6 +1,6 @@ diff --git a/app/components/AppHeader.vue b/app/components/AppHeader.vue index f11db45..e8014c4 100644 --- a/app/components/AppHeader.vue +++ b/app/components/AppHeader.vue @@ -28,13 +28,22 @@ const navs = [ }, { label: { - en: 'portfolio', - fr: 'portfolio', + en: 'writings', + fr: 'écrits', es: 'escritos', }, - to: '/portfolio', + to: '/writings', icon: 'books-duotone', }, + { + label: { + en: 'projects', + fr: 'projets', + es: 'proyectos', + }, + to: '/projects', + icon: 'code-duotone', + }, { label: { en: 'resume', diff --git a/app/components/content/ProseIcon.vue b/app/components/content/ProseIcon.vue index 862fa3e..c5854c9 100644 --- a/app/components/content/ProseIcon.vue +++ b/app/components/content/ProseIcon.vue @@ -11,19 +11,19 @@ defineProps({ }) const colorVariants = { - gray: 'text-gray-500 decoration-gray-400', - red: 'text-red-500 decoration-red-400', - yellow: 'text-yellow-500 decoration-yellow-400', - green: 'text-green-500 decoration-green-400', - blue: 'text-blue-500 decoration-blue-400', - indigo: 'text-indigo-500 decoration-indigo-400', - purple: 'text-purple-500 decoration-purple-400', - pink: 'text-pink-500 decoration-pink-400', - sky: 'text-sky-500 decoration-sky-400', - zinc: 'text-zinc-500 decoration-zinc-400', - orange: 'text-orange-500 decoration-orange-400', - amber: 'text-amber-500 decoration-amber-400', - emerald: 'text-emerald-500 decoration-emerald-400', + gray: 'text-gray-500/80 decoration-gray-400/80', + red: 'text-red-500/80 decoration-red-400/80', + yellow: 'text-yellow-500/80 decoration-yellow-400/80', + green: 'text-green-500/80 decoration-green-400/80', + blue: 'text-blue-500/80 decoration-blue-400/80', + indigo: 'text-indigo-500/80 decoration-indigo-400/80', + purple: 'text-purple-500/80 decoration-purple-400/80', + pink: 'text-pink-500/80 decoration-pink-400/80', + sky: 'text-sky-500/80 decoration-sky-400/80', + zinc: 'text-zinc-500/80 decoration-zinc-400/80', + orange: 'text-orange-500/80 decoration-orange-400/80', + amber: 'text-amber-500/80 decoration-amber-400/80', + emerald: 'text-emerald-500/80 decoration-emerald-400/80', } @@ -34,7 +34,7 @@ const colorVariants = { :name="`i-logos:${icon}`" /> diff --git a/app/components/content/ProseImg.vue b/app/components/content/ProseImg.vue index a58215e..a83e4aa 100644 --- a/app/components/content/ProseImg.vue +++ b/app/components/content/ProseImg.vue @@ -5,7 +5,7 @@ defineProps<{ src: string, label: string, caption?: string }>()