6.2 KiB
6.2 KiB
External Integrations
Analysis Date: 2026-04-07
APIs & External Services
Analytics & Tracking:
-
Google Analytics (GTM)
- Measurement ID:
G-CDVVNFY6MV - Script: Injected in
index.htmllines 8-16 - Implementation: Inline gtag.js initialization with window.dataLayer
- Page tracking: Configured in
src/router/index.tslines 105-136 viatrackPageView()function - Tracks: Page path, title, and location on route changes
- Measurement ID:
-
Umami Analytics
- Website ID:
83631152-9b6b-4724-aad1-828459ff36dc - Hosted at:
umami.killiandalcin.fr - Script tag:
index.htmlline 239 - Implementation: Self-hosted privacy-focused alternative to Google Analytics
- Website ID:
Advertising:
- Google AdSense
- Client ID:
ca-pub-5219367964457248 - Script: Async loaded in
index.htmllines 18-20 - Purpose: Display contextual ads on portfolio pages
- Client ID:
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.vueandsrc/composables/useProjects.tsas portfolio technology (instagram-bot project) - Crowdin API - Referenced in
src/composables/useProjects.tsas portfolio technology (crowdin status bot) - Discord.js - Referenced in
src/composables/useProjects.tsas 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
- MongoDB - Referenced in
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.)
- Images:
Caching:
- Browser caching via content hash in filenames:
- Pattern:
assets/[ext]/[name]-[hash].[ext](configured invite.config.tslines 40-42) - CSS:
assets/css/[name]-[hash].css - JS:
assets/js/[name]-[hash].js
- Pattern:
- 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 inDockerfile) - Runtime image:
nginx:stable-alpine(lines 20-32 inDockerfile) - Port: 80
- Build image:
CI Pipeline:
- None detected in repository
- Build commands available:
npm run build- Full build with type checkingnpm run build-only- Build only without type checking
Deployment Configuration:
Dockerfile- Multi-stage Docker build:- Build stage: Node 22-alpine with npm install + build
- Production stage: nginx serving built files
- 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- inindex.htmlline 9 - Google AdSense:
ca-pub-5219367964457248- inindex.htmlline 19 - Umami Site ID:
83631152-9b6b-4724-aad1-828459ff36dc- inindex.htmlline 240 - Umami URL:
umami.killiandalcin.fr- inindex.htmlline 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.tstrackPageView()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.comhttps://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
- Service:
-
Placeholder Images:
- Service:
https://via.placeholder.com/ - Usage: Fallback images in
src/composables/useAssets.ts - Pattern: 400x300 gray placeholders
- Service:
-
Portfolio Preview Image:
- Hosted at:
https://killiandalcin.fr/portfolio-preview.webp - Usage: Open Graph and Twitter meta tags (lines 42, 55 in
index.html)
- Hosted at:
Integration audit: 2026-04-07