Live website: ditems.fr
This is Michael's online CV — a single-page website that presents his professional profile as a Data Engineer & Cloud Architect. Visitors can read about his experience, certifications, and projects, then send him a message directly from the site.
There is no server, no database, no login. Everything runs in the visitor's browser. The only external service used is EmailJS to send contact form messages.
You write code → push to main → GitHub builds the site → GitHub Pages serves it at ditems.fr
- The source code lives in this repository (branch
devfor development,mainfor production). - Every push to
maintriggers an automated build via GitHub Actions (see.github/workflows/deploy.yml). - The build tool (Vite) compiles all the TypeScript + React code into plain HTML/CSS/JS files inside a
dist/folder. - Those files are automatically pushed to the
gh-pagesbranch. - GitHub Pages reads that branch and serves it at
ditems.fr.
The CV PDF is served directly from GitHub's raw file URL — no hosting setup needed.
| What you see | What it actually is |
|---|---|
| The UI framework | React 18 — components that render the page |
| The build tool | Vite — compiles and bundles the code fast |
| The language | TypeScript — JavaScript with type safety |
| The styling | Tailwind CSS — utility classes, no separate CSS files |
| The UI components | shadcn/ui — pre-built accessible components (buttons, cards, etc.) |
| The forms | React Hook Form + Zod — form state management + input validation |
| The email sender | EmailJS — sends emails from the browser without a backend |
| The translations | i18next — FR/EN language support, auto-detected from the browser |
ditems-data-craft/
├── src/
│ ├── pages/
│ │ └── Index.tsx ← The one and only page (assembles all sections)
│ ├── components/
│ │ ├── Header.tsx ← Top navigation bar
│ │ ├── Hero.tsx ← Big intro section with name/title
│ │ ├── About.tsx ← Bio + skill bars + certifications preview
│ │ ├── Experience.tsx ← Professional history (6 roles)
│ │ ├── Certifications.tsx← 4 Microsoft certifications
│ │ ├── Work.tsx ← Project showcase
│ │ ├── Contact.tsx ← Contact form (sends via EmailJS)
│ │ └── FloatingDownload.tsx ← Floating CV download button
│ ├── i18n/
│ │ └── locales/
│ │ ├── en.json ← English texts
│ │ └── fr.json ← French texts
│ └── utils/
│ └── security.ts ← Input sanitization helpers
├── resume/
│ └── CV_METINHOUE_FR.pdf ← The downloadable CV
├── .github/workflows/
│ └── deploy.yml ← Automated deployment to GitHub Pages
├── architecture.md ← Full technical documentation
├── features.md ← Feature inventory and known issues
└── changelog.md ← History of changes
You need Node.js installed (v18 or later). If you don't have it: nodejs.org.
# 1. Clone the repo
git clone https://github.com/MickyMik/ditems-data-craft.git
cd ditems-data-craft
# 2. Install dependencies
npm install
# 3. Start the development server
npm run devThen open your browser at http://localhost:8080. The page reloads automatically when you save a file.
Automatic — just push to main:
git checkout main
git merge dev
git push origin mainGitHub Actions does the rest. The site is live at ditems.fr within ~2 minutes.
To check deployment status: go to the repository → Actions tab → watch the latest workflow run.
The form does not use a backend server. Instead:
- The visitor fills in the form (name, email, subject, message).
- The browser validates the inputs (format check, length, anti-spam 60s cooldown).
- On submit, EmailJS sends the message directly from the browser to Michael's inbox using pre-configured API keys.
- No data is stored anywhere — it goes straight to email.
EmailJS credentials (in src/components/Contact.tsx):
- These keys are intentionally public — EmailJS is designed to work this way client-side.
The site supports French and English. The language is automatically detected from the visitor's browser settings.
- If the browser language is French → site shows in French
- Otherwise → site shows in English
Translations live in src/i18n/locales/en.json and fr.json.
Note: some sections (Experience, Certifications) are currently hardcoded in English only — full translation is planned.
| Branch | Purpose |
|---|---|
dev |
Active development — make changes here |
main |
Production — every push here triggers a deployment |
gh-pages |
Auto-generated build artifact — do not edit manually |
backup/ameliorations-2026-05-05 |
Saved refactor attempt (not merged) |
If you clone or reuse this project, please credit the original author. Contact: admin.demarches@ditems.fr