Scaffold Astro 5 project with static output and i18n-ready content collections
This commit is contained in:
5
.env.example
Normal file
5
.env.example
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Logto auth endpoints — the marketing site only performs <a href> navigations to these.
|
||||||
|
# No tokens, no cookies, no XHR — these are plain hyperlinks.
|
||||||
|
PUBLIC_AUTH_SIGNIN_URL=https://auth.cameleer.io/sign-in
|
||||||
|
PUBLIC_AUTH_SIGNUP_URL=https://auth.cameleer.io/sign-in?first_screen=register
|
||||||
|
PUBLIC_SALES_EMAIL=sales@cameleer.io
|
||||||
22
astro.config.mjs
Normal file
22
astro.config.mjs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { defineConfig } from 'astro/config';
|
||||||
|
import tailwind from '@astrojs/tailwind';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
site: 'https://www.cameleer.io',
|
||||||
|
output: 'static',
|
||||||
|
trailingSlash: 'never',
|
||||||
|
build: {
|
||||||
|
format: 'file',
|
||||||
|
assets: 'assets',
|
||||||
|
inlineStylesheets: 'auto',
|
||||||
|
},
|
||||||
|
compressHTML: true,
|
||||||
|
integrations: [
|
||||||
|
tailwind({ applyBaseStyles: false }),
|
||||||
|
],
|
||||||
|
vite: {
|
||||||
|
build: {
|
||||||
|
cssMinify: 'lightningcss',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
13027
package-lock.json
generated
Normal file
13027
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
33
package.json
Normal file
33
package.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "cameleer-website",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"type": "module",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "astro dev",
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro build",
|
||||||
|
"preview": "astro preview",
|
||||||
|
"astro": "astro",
|
||||||
|
"test": "vitest run",
|
||||||
|
"test:watch": "vitest",
|
||||||
|
"lint:html": "html-validate 'dist/**/*.html'",
|
||||||
|
"lint:links": "linkinator dist --recurse --silent",
|
||||||
|
"lh": "lhci autorun"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@astrojs/tailwind": "^5.1.0",
|
||||||
|
"@fontsource/dm-sans": "^5.0.21",
|
||||||
|
"@fontsource/jetbrains-mono": "^5.0.21",
|
||||||
|
"astro": "^5.0.0",
|
||||||
|
"tailwindcss": "^3.4.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@lhci/cli": "^0.14.0",
|
||||||
|
"@types/node": "^20.11.0",
|
||||||
|
"html-validate": "^8.18.0",
|
||||||
|
"linkinator": "^6.1.0",
|
||||||
|
"typescript": "^5.4.0",
|
||||||
|
"vitest": "^1.6.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
23
src/content/config.ts
Normal file
23
src/content/config.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { defineCollection, z } from 'astro:content';
|
||||||
|
|
||||||
|
// Scaffold only — no entries yet. Added now so future blog/docs work is pure content, not refactor.
|
||||||
|
const blog = defineCollection({
|
||||||
|
type: 'content',
|
||||||
|
schema: z.object({
|
||||||
|
title: z.string(),
|
||||||
|
description: z.string(),
|
||||||
|
publishedAt: z.date(),
|
||||||
|
draft: z.boolean().default(true),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const docs = defineCollection({
|
||||||
|
type: 'content',
|
||||||
|
schema: z.object({
|
||||||
|
title: z.string(),
|
||||||
|
description: z.string(),
|
||||||
|
order: z.number().default(99),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const collections = { blog, docs };
|
||||||
0
src/content/en/.gitkeep
Normal file
0
src/content/en/.gitkeep
Normal file
5
tsconfig.json
Normal file
5
tsconfig.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"extends": "astro/tsconfigs/strict",
|
||||||
|
"include": ["src/**/*", "astro.config.mjs", "tailwind.config.mjs"],
|
||||||
|
"exclude": ["dist", "node_modules"]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user