181 lines
6.2 KiB
Markdown
181 lines
6.2 KiB
Markdown
# External Integrations
|
|
|
|
**Analysis Date:** 2026-04-07
|
|
|
|
## APIs & External Services
|
|
|
|
**Analytics & Tracking:**
|
|
- Google Analytics (GTM)
|
|
- Measurement ID: `G-CDVVNFY6MV`
|
|
- Script: Injected in `index.html` lines 8-16
|
|
- Implementation: Inline gtag.js initialization with window.dataLayer
|
|
- Page tracking: Configured in `src/router/index.ts` lines 105-136 via `trackPageView()` function
|
|
- Tracks: Page path, title, and location on route changes
|
|
|
|
- Umami Analytics
|
|
- Website ID: `83631152-9b6b-4724-aad1-828459ff36dc`
|
|
- Hosted at: `umami.killiandalcin.fr`
|
|
- Script tag: `index.html` line 239
|
|
- Implementation: Self-hosted privacy-focused alternative to Google Analytics
|
|
|
|
**Advertising:**
|
|
- Google AdSense
|
|
- Client ID: `ca-pub-5219367964457248`
|
|
- Script: Async loaded in `index.html` lines 18-20
|
|
- Purpose: Display contextual ads on portfolio pages
|
|
|
|
**Social Integration:**
|
|
Social media links configured in `src/config/site.ts` (no direct API integration):
|
|
- GitHub/Gitea: `https://gitea.kamisama.ovh/kayjaydee`
|
|
- LinkedIn: `https://linkedin.com/in/killian-dal-cin`
|
|
- Discord: `https://discord.com/users/370940770225618954`
|
|
- Fiverr: `https://www.fiverr.com/users/mr_kayjaydee`
|
|
- Twitter: `@killiandalcin`
|
|
|
|
**Third-Party Services Referenced (Portfolio Content, Not Integrated):**
|
|
- Instagram API - Referenced in `src/components/TechBadge.vue` and `src/composables/useProjects.ts` as portfolio technology (instagram-bot project)
|
|
- Crowdin API - Referenced in `src/composables/useProjects.ts` as portfolio technology (crowdin status bot)
|
|
- Discord.js - Referenced in `src/composables/useProjects.ts` as portfolio technology (Discord bot development)
|
|
- NPM Package Registry - discord-image-generation published at `https://www.npmjs.com/package/discord-image-generation`
|
|
|
|
## Data Storage
|
|
|
|
**Databases:**
|
|
- None detected - Portfolio is static content
|
|
- Technologies showcased (not used in this app):
|
|
- MongoDB - Referenced in `src/data/techstack.ts`
|
|
- MySQL - Referenced in `src/data/techstack.ts`
|
|
- PostgreSQL - Referenced in `src/data/techstack.ts`
|
|
- Redis - Referenced in `src/data/techstack.ts`
|
|
- SQLite - Referenced in `src/data/techstack.ts`
|
|
|
|
**File Storage:**
|
|
- Local filesystem only
|
|
- Images: `src/assets/images/` directory
|
|
- Compiled assets: `dist/` directory (generated on build)
|
|
- Public assets: `public/` directory (favicon, manifest, logos, etc.)
|
|
|
|
**Caching:**
|
|
- Browser caching via content hash in filenames:
|
|
- Pattern: `assets/[ext]/[name]-[hash].[ext]` (configured in `vite.config.ts` lines 40-42)
|
|
- CSS: `assets/css/[name]-[hash].css`
|
|
- JS: `assets/js/[name]-[hash].js`
|
|
- No server-side caching layer detected
|
|
|
|
## Authentication & Identity
|
|
|
|
**Auth Provider:**
|
|
- None - Portfolio is fully public
|
|
- No authentication system implemented
|
|
- Fiverr links redirect to external Fiverr service for user authentication
|
|
|
|
## Monitoring & Observability
|
|
|
|
**Error Tracking:**
|
|
- None detected
|
|
- Errors not sent to external service
|
|
- Console errors only (JavaScript errors in browser dev tools)
|
|
|
|
**Logs:**
|
|
- Browser console logging only
|
|
- No server-side logging or aggregation
|
|
- Analytics events sent to Google Analytics and Umami for page views
|
|
|
|
**Performance Monitoring:**
|
|
- Google Analytics provides basic performance metrics
|
|
- Umami provides engagement metrics
|
|
- No dedicated APM (Application Performance Monitoring) service
|
|
|
|
## CI/CD & Deployment
|
|
|
|
**Hosting:**
|
|
- Static hosting environment (implied)
|
|
- Docker containerization available:
|
|
- Build image: `node:22-alpine` (lines 2-17 in `Dockerfile`)
|
|
- Runtime image: `nginx:stable-alpine` (lines 20-32 in `Dockerfile`)
|
|
- Port: 80
|
|
|
|
**CI Pipeline:**
|
|
- None detected in repository
|
|
- Build commands available:
|
|
- `npm run build` - Full build with type checking
|
|
- `npm run build-only` - Build only without type checking
|
|
|
|
**Deployment Configuration:**
|
|
- `Dockerfile` - Multi-stage Docker build:
|
|
1. Build stage: Node 22-alpine with npm install + build
|
|
2. Production stage: nginx serving built files
|
|
3. Custom nginx config: `nginx.conf`
|
|
- `nginx.conf` - SPA routing configuration:
|
|
- Listens on port 80 (IPv4 and IPv6)
|
|
- Document root: `/usr/share/nginx/html`
|
|
- Fallback: All non-file requests route to `/index.html` (SPA requirement)
|
|
|
|
## Environment Configuration
|
|
|
|
**Required for Development:**
|
|
- Node.js 22+
|
|
- npm 10+
|
|
|
|
**Required at Runtime:**
|
|
- No environment variables required (analytics IDs hardcoded in HTML)
|
|
- Optional (for containerization):
|
|
- Docker
|
|
- Docker Compose
|
|
|
|
**Hardcoded Configuration:**
|
|
- Google Analytics: `G-CDVVNFY6MV` - in `index.html` line 9
|
|
- Google AdSense: `ca-pub-5219367964457248` - in `index.html` line 19
|
|
- Umami Site ID: `83631152-9b6b-4724-aad1-828459ff36dc` - in `index.html` line 240
|
|
- Umami URL: `umami.killiandalcin.fr` - in `index.html` line 239
|
|
- Base URL: `https://killiandalcin.fr` - in multiple config files (`src/config/site.ts`, `index.html`)
|
|
|
|
**Secrets Location:**
|
|
- No secrets management system
|
|
- All credentials are public analytics/advertising IDs (not sensitive)
|
|
- No API keys, database passwords, or private credentials in codebase
|
|
|
|
## Webhooks & Callbacks
|
|
|
|
**Incoming:**
|
|
- None - Portfolio is read-only
|
|
|
|
**Outgoing:**
|
|
- Google Analytics pageview tracking:
|
|
- Method: GET requests to Google Analytics endpoint
|
|
- Triggered: On route navigation
|
|
- Data: Page path, title, URL
|
|
- Implementation: `src/router/index.ts` `trackPageView()` function
|
|
|
|
- Umami analytics events:
|
|
- Method: Beacon API (automatic page tracking)
|
|
- Triggered: Page load and navigation
|
|
- Data: Standard web vitals
|
|
|
|
## CDN & External Resources
|
|
|
|
**Fonts:**
|
|
- Preconnected in `index.html`:
|
|
- `https://fonts.googleapis.com`
|
|
- `https://fonts.gstatic.com`
|
|
- Actual fonts: Not loaded (preconnect only, fonts not referenced in CSS)
|
|
|
|
**Images & Media:**
|
|
- UI Avatar API:
|
|
- Service: `https://ui-avatars.com/api/`
|
|
- Usage: Testimonial avatars in `src/data/testimonials.ts` (4 instances)
|
|
- Pattern: Query-based avatar generation with initials and colors
|
|
|
|
- Placeholder Images:
|
|
- Service: `https://via.placeholder.com/`
|
|
- Usage: Fallback images in `src/composables/useAssets.ts`
|
|
- Pattern: 400x300 gray placeholders
|
|
|
|
- Portfolio Preview Image:
|
|
- Hosted at: `https://killiandalcin.fr/portfolio-preview.webp`
|
|
- Usage: Open Graph and Twitter meta tags (lines 42, 55 in `index.html`)
|
|
|
|
---
|
|
|
|
*Integration audit: 2026-04-07*
|