feat(web): scaffold Next.js 16 dashboard with design system and auth client (#82)

Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
This commit was merged in pull request #82.
This commit is contained in:
2026-03-13 13:18:09 +00:00
committed by jason.woltje
parent 5d936d58a0
commit 780f85e0d6
26 changed files with 1070 additions and 83 deletions

View File

@@ -1,6 +1,7 @@
{
"name": "@mosaic/design-tokens",
"version": "0.0.0",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {

View File

@@ -0,0 +1,91 @@
/**
* Mosaic Stack color palette.
* Deep blue-grays with blue/purple/teal accents.
*/
export const colors = {
/** Neutral blue-gray scale */
gray: {
50: '#f0f2f5',
100: '#dce0e8',
200: '#b8c0cc',
300: '#8e99a9',
400: '#6b7a8d',
500: '#4e5d70',
600: '#3b4859',
700: '#2a3544',
800: '#1c2433',
900: '#111827',
950: '#0a0f1a',
},
/** Primary — blue */
blue: {
50: '#eff4ff',
100: '#dae5ff',
200: '#bdd1ff',
300: '#8fb4ff',
400: '#5b8bff',
500: '#3b6cf7',
600: '#2551e0',
700: '#1d40c0',
800: '#1e369c',
900: '#1e317b',
950: '#162050',
},
/** Accent — purple */
purple: {
50: '#f3f0ff',
100: '#e7dfff',
200: '#d2c3ff',
300: '#b49aff',
400: '#9466ff',
500: '#7c3aed',
600: '#6d28d9',
700: '#5b21b6',
800: '#4c1d95',
900: '#3b1578',
950: '#230d4d',
},
/** Accent — teal */
teal: {
50: '#effcf9',
100: '#d0f7ef',
200: '#a4eddf',
300: '#6fddcb',
400: '#3ec5b2',
500: '#25aa99',
600: '#1c897e',
700: '#1b6e66',
800: '#1a5853',
900: '#194945',
950: '#082d2b',
},
/** Semantic */
success: '#22c55e',
warning: '#f59e0b',
error: '#ef4444',
info: '#3b82f6',
/** Surface — dark theme defaults */
surface: {
background: '#0a0f1a',
card: '#111827',
elevated: '#1c2433',
overlay: 'rgba(0, 0, 0, 0.6)',
border: '#2a3544',
},
/** Text */
text: {
primary: '#f0f2f5',
secondary: '#8e99a9',
muted: '#6b7a8d',
inverse: '#0a0f1a',
},
} as const;
export type Colors = typeof colors;

View File

@@ -0,0 +1,33 @@
/**
* Mosaic Stack font definitions.
* Outfit (sans) — headings and body.
* Fira Code (mono) — code and terminal.
*/
export const fonts = {
sans: {
family: 'Outfit',
fallback: 'system-ui, -apple-system, sans-serif',
stack: "'Outfit', system-ui, -apple-system, sans-serif",
weights: {
light: 300,
regular: 400,
medium: 500,
semibold: 600,
bold: 700,
},
},
mono: {
family: 'Fira Code',
fallback: 'ui-monospace, Menlo, monospace',
stack: "'Fira Code', ui-monospace, Menlo, monospace",
weights: {
regular: 400,
medium: 500,
bold: 700,
},
},
} as const;
export type Fonts = typeof fonts;

View File

@@ -1 +1,5 @@
export const VERSION = '0.0.0';
export const VERSION = '0.0.1';
export { colors, type Colors } from './colors.js';
export { fonts, type Fonts } from './fonts.js';
export { spacing, radius, type Spacing, type Radius } from './spacing.js';

View File

@@ -0,0 +1,38 @@
/**
* Mosaic Stack spacing scale (in rem).
* Based on a 4px grid (0.25rem increments).
*/
export const spacing = {
px: '1px',
0: '0',
0.5: '0.125rem',
1: '0.25rem',
1.5: '0.375rem',
2: '0.5rem',
2.5: '0.625rem',
3: '0.75rem',
4: '1rem',
5: '1.25rem',
6: '1.5rem',
8: '2rem',
10: '2.5rem',
12: '3rem',
16: '4rem',
20: '5rem',
24: '6rem',
32: '8rem',
} as const;
export const radius = {
none: '0',
sm: '0.25rem',
md: '0.375rem',
lg: '0.5rem',
xl: '0.75rem',
'2xl': '1rem',
full: '9999px',
} as const;
export type Spacing = typeof spacing;
export type Radius = typeof radius;