feat: scaffold astro app, dark identity

This commit is contained in:
electron-rare
2026-06-10 21:13:45 +02:00
parent da1e543424
commit 2971b270bc
11 changed files with 6236 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
node_modules
dist
.git
docs
fixtures
ops
+4
View File
@@ -0,0 +1,4 @@
node_modules/
dist/
.astro/
*.env
+15
View File
@@ -0,0 +1,15 @@
FROM node:22-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
ENV HOST=0.0.0.0 PORT=4321
EXPOSE 4321
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:4321/ || exit 1
CMD ["node", "dist/server/entry.mjs"]
+11
View File
@@ -0,0 +1,11 @@
// @ts-check
import { defineConfig } from 'astro/config';
import tailwindcss from '@tailwindcss/vite';
import node from '@astrojs/node';
export default defineConfig({
site: 'https://formations.saillant.cc',
output: 'server',
adapter: node({ mode: 'standalone' }),
vite: { plugins: [tailwindcss()] },
});
+6102
View File
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
{
"name": "formations-app",
"type": "module",
"version": "0.1.0",
"engines": { "node": ">=22.12.0" },
"scripts": {
"dev": "astro dev",
"build": "astro build",
"test": "vitest run",
"astro": "astro"
},
"dependencies": {
"@astrojs/node": "^10.0.4",
"astro": "^6.1.3",
"@tailwindcss/vite": "^4.2.2",
"tailwindcss": "^4.2.2",
"three": "0.184.0"
},
"devDependencies": {
"vitest": "^3.0.0",
"@types/three": "0.184.1"
}
}
+16
View File
@@ -0,0 +1,16 @@
---
interface Props { light?: boolean; }
const { light = false } = Astro.props;
---
<nav class:list={['fixed top-0 left-0 right-0 z-50 border-b backdrop-blur-xl',
light ? 'bg-white/80 border-slate-200' : 'bg-night/70 border-white/10']}>
<div class="max-w-content mx-auto px-6 flex items-center justify-between h-14">
<a href="/" class:list={['font-semibold tracking-tight text-base', light ? 'text-ink' : 'text-white']}>
Formations <span class="text-copper">·</span> L'Electron Rare
</a>
<a href="https://www.lelectronrare.fr" class:list={['text-sm transition-colors',
light ? 'text-slate-500 hover:text-ink' : 'text-slate-400 hover:text-white']}>
lelectronrare.fr →
</a>
</div>
</nav>
+24
View File
@@ -0,0 +1,24 @@
---
import '../styles/global.css';
interface Props { title: string; description: string; light?: boolean; }
const { title, description, light = false } = Astro.props;
const fullTitle = `${title} | Formations L'Electron Rare`;
---
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{fullTitle}</title>
<meta name="description" content={description} />
<link rel="canonical" href={Astro.url.href} />
<meta property="og:type" content="website" />
<meta property="og:title" content={fullTitle} />
<meta property="og:description" content={description} />
<meta property="og:locale" content="fr_FR" />
</head>
<body class:list={[light ? 'bg-paper text-ink' : 'bg-night text-slate-200', 'antialiased min-h-screen']}>
<slot />
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
---
import Base from '../layouts/Base.astro';
import Nav from '../components/Nav.astro';
---
<Base title="Catalogue" description="Formations systèmes embarqués et IA — L'Electron Rare">
<Nav />
<main class="pt-24 px-6 max-w-content mx-auto">
<h1 class="text-4xl font-semibold text-white">Formations</h1>
</main>
</Base>
+20
View File
@@ -0,0 +1,20 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
@import "tailwindcss";
@theme {
--color-night: #0b0f17;
--color-night-soft: #141c2e;
--color-copper: #f97316;
--color-copper-soft: #fdba74;
--color-copper-dim: rgba(249, 115, 22, 0.12);
--color-ink: #1d1d1f;
--color-paper: #fafafa;
--font-family-sans: 'Inter', system-ui, sans-serif;
--font-family-mono: 'JetBrains Mono', monospace;
--max-width-content: 980px;
--max-width-prose: 720px;
}
html { font-family: 'Inter', system-ui, sans-serif; background: var(--color-night); color: #e2e8f0; scroll-behavior: smooth; }
::selection { background: var(--color-copper); color: white; }
* { box-sizing: border-box; }
+5
View File
@@ -0,0 +1,5 @@
{
"extends": "astro/tsconfigs/strict",
"include": [".astro/types.d.ts", "src/**/*"],
"exclude": ["dist"]
}