Initial commit: monorepo setup with apps, packages, services

This commit is contained in:
Puechberty Arthur
2026-04-02 19:59:08 +02:00
commit a37299df19
17 changed files with 7077 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
# --------------------------
# Node / Dependencies
# --------------------------
node_modules/
**/node_modules/
.npm/
.pnpm-store/
.pnp
.pnp.*
.yarn/
!.yarn/patches/
!.yarn/plugins/
!.yarn/releases/
!.yarn/versions/
# --------------------------
# Turborepo / Caches
# --------------------------
.turbo/
.cache/
# --------------------------
# Testing
# --------------------------
coverage/
**/coverage/
# --------------------------
# Next.js / Frontend builds
# --------------------------
.next/
**/.next/
out/
**/out/
# --------------------------
# Production / Builds
# --------------------------
build/
**/build/
dist/
**/dist/
# --------------------------
# Env files / secrets
# --------------------------
.env
.env.*
*.pem
# --------------------------
# Debug logs
# --------------------------
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# --------------------------
# Vercel
# --------------------------
.vercel/
# --------------------------
# TypeScript
# --------------------------
*.tsbuildinfo
next-env.d.ts
# --------------------------
# IDE / Editor
# --------------------------
.vscode/
.idea/
*.sublime-workspace
*.sublime-project
# --------------------------
# Mac / OS
# --------------------------
.DS_Store
Thumbs.db
+25
View File
@@ -0,0 +1,25 @@
Copyright (c) 2026 Arthur
Licence pour tous les projets Arthur
1. Définition
Cette licence définit les droits et obligations concernant l'utilisation, la modification et la redistribution du code fourni par l'auteur.
2. Autorisation d'utilisation
Vous êtes libre d'utiliser ce code pour vos projets personnels ou commerciaux. L'utilisation doit inclure une mention de l'auteur dune manière libre (ex: "inspiré de ArthurP").
3. Modification
Vous pouvez modifier, adapter ou améliorer le code pour vos besoins. Les modifications doivent être identifiées comme telles et ne doivent pas être présentées comme l'original.
4. Redistribution
- Le code original **ne peut pas être redistribué tel quel**.
- Les versions modifiées peuvent être partagées, sous réserve de mentionner l'auteur original.
5. Usage commercial
Lusage commercial des versions modifiées est autorisé. Vous pouvez générer des revenus avec votre version modifiée.
6. Attribution
L'auteur original doit être cité dune manière libre, mais visible, sur tout projet utilisant ce code ou ses dérivés.
7. Responsabilité
Le code est fourni "tel quel", sans garantie daucune sorte. Lauteur décline toute responsabilité pour tout dommage direct ou indirect résultant de lutilisation du code.
+15
View File
@@ -0,0 +1,15 @@
# Arthurp
Monorepo simple avec Next.js.
## Structure
- `apps/web` : application web Next.js
- `packages` : packages partagés
- `services` : services annexes
## Commandes
- `npm install`
- `npm run dev`
- `npm run build`
+5
View File
@@ -0,0 +1,5 @@
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
<!-- END:nextjs-agent-rules -->
+1
View File
@@ -0,0 +1 @@
@AGENTS.md
Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

+26
View File
@@ -0,0 +1,26 @@
@import "tailwindcss";
:root {
--background: #ffffff;
--foreground: #171717;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: var(--font-geist-sans), Arial, Helvetica, sans-serif;
}
+33
View File
@@ -0,0 +1,33 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Arthurp",
description: "Site daccueil simple pour le monorepo Arthurp.",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html
lang="fr"
className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`}
>
<body className="min-h-full flex flex-col">{children}</body>
</html>
);
}
+68
View File
@@ -0,0 +1,68 @@
export default function Home() {
return (
<main className="min-h-screen bg-[linear-gradient(180deg,#f8fafc_0%,#eef2ff_100%)] px-6 py-10 text-slate-900">
<div className="mx-auto flex min-h-[calc(100vh-5rem)] w-full max-w-5xl flex-col justify-center gap-10">
<div className="max-w-2xl space-y-6">
<span className="inline-flex rounded-full border border-slate-200 bg-white px-4 py-1 text-sm font-medium text-slate-600 shadow-sm">
Site daccueil
</span>
<div className="space-y-4">
<h1 className="text-4xl font-semibold tracking-tight sm:text-6xl">
Un départ propre pour ton monorepo.
</h1>
<p className="max-w-xl text-lg leading-8 text-slate-600">
Une page daccueil claire, rapide à lire, et facile à faire évoluer pour
présenter ton projet dès le premier écran.
</p>
</div>
<div className="flex flex-col gap-3 sm:flex-row">
<a
href="#contact"
className="inline-flex h-12 items-center justify-center rounded-full bg-slate-900 px-6 text-sm font-semibold text-white transition hover:bg-slate-700"
>
Me contacter
</a>
<a
href="#services"
className="inline-flex h-12 items-center justify-center rounded-full border border-slate-300 bg-white px-6 text-sm font-semibold text-slate-900 transition hover:border-slate-400"
>
Voir les services
</a>
</div>
</div>
<section id="services" className="grid gap-4 md:grid-cols-3">
<article className="rounded-3xl border border-slate-200 bg-white p-6 shadow-sm">
<p className="text-sm font-semibold text-slate-500">01</p>
<h2 className="mt-3 text-xl font-semibold">Simple</h2>
<p className="mt-2 text-sm leading-6 text-slate-600">
Une structure minimale, sans surcharge visuelle.
</p>
</article>
<article className="rounded-3xl border border-slate-200 bg-white p-6 shadow-sm">
<p className="text-sm font-semibold text-slate-500">02</p>
<h2 className="mt-3 text-xl font-semibold">Rapide</h2>
<p className="mt-2 text-sm leading-6 text-slate-600">
Pensée pour être modifiée vite quand tu ajoutes du contenu.
</p>
</article>
<article className="rounded-3xl border border-slate-200 bg-white p-6 shadow-sm">
<p className="text-sm font-semibold text-slate-500">03</p>
<h2 className="mt-3 text-xl font-semibold">Propre</h2>
<p className="mt-2 text-sm leading-6 text-slate-600">
Une base saine pour un monorepo Next.js clair et organisé.
</p>
</article>
</section>
<footer
id="contact"
className="flex flex-col gap-2 border-t border-slate-200 pt-6 text-sm text-slate-500 sm:flex-row sm:items-center sm:justify-between"
>
<span>Projet monorepo Next.js</span>
<span>Contact: contact@arthurp.fr</span>
</footer>
</div>
</main>
);
}
+18
View File
@@ -0,0 +1,18 @@
import { defineConfig, globalIgnores } from "eslint/config";
import nextVitals from "eslint-config-next/core-web-vitals";
import nextTs from "eslint-config-next/typescript";
const eslintConfig = defineConfig([
...nextVitals,
...nextTs,
// Override default ignores of eslint-config-next.
globalIgnores([
// Default ignores of eslint-config-next:
".next/**",
"out/**",
"build/**",
"next-env.d.ts",
]),
]);
export default eslintConfig;
+9
View File
@@ -0,0 +1,9 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
turbopack: {
root: '../../', // chemin vers la racine du monorepo
},
};
export default nextConfig;
+26
View File
@@ -0,0 +1,26 @@
{
"name": "web",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint"
},
"dependencies": {
"next": "16.2.2",
"react": "19.2.4",
"react-dom": "19.2.4"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
"eslint-config-next": "16.2.2",
"tailwindcss": "^4",
"typescript": "^5"
}
}
+7
View File
@@ -0,0 +1,7 @@
const config = {
plugins: {
"@tailwindcss/postcss": {},
},
};
export default config;
+34
View File
@@ -0,0 +1,34 @@
{
"compilerOptions": {
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./*"]
}
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts",
"**/*.mts"
],
"exclude": ["node_modules"]
}
+6700
View File
File diff suppressed because it is too large Load Diff
+17
View File
@@ -0,0 +1,17 @@
{
"name": "arthurp",
"private": true,
"packageManager": "npm@11.6.2",
"workspaces": [
"apps/*",
"packages/*",
"services/*"
],
"scripts": {
"dev": "turbo run dev",
"build": "turbo run build"
},
"devDependencies": {
"turbo": "^2.9.3"
}
}
+11
View File
@@ -0,0 +1,11 @@
{
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**"]
},
"dev": {
"cache": false
}
}
}