feat: scaffold astro app, dark identity
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
node_modules
|
||||
dist
|
||||
.git
|
||||
docs
|
||||
fixtures
|
||||
ops
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.astro/
|
||||
*.env
|
||||
+15
@@ -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"]
|
||||
@@ -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()] },
|
||||
});
|
||||
Generated
+6102
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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; }
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [".astro/types.d.ts", "src/**/*"],
|
||||
"exclude": ["dist"]
|
||||
}
|
||||
Reference in New Issue
Block a user