Import Tripoli Cloud frontend prototype
React/TypeScript/Vite/Tailwind prototype from the design session (login, dashboard, photos, backups, settings views with mocked API layer). Infra work (Rust services, Ansible, OpenTofu) follows in subsequent commits. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
commit
5dbd3b96f6
73 changed files with 4789 additions and 0 deletions
10
app/src/lib/backgrounds.ts
Normal file
10
app/src/lib/backgrounds.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* Auth-screen background layers. Replace each entry with
|
||||
* `url('/assets/bg-1.jpg') center/cover no-repeat` for real photography —
|
||||
* the crossfade logic in useBackgroundCrossfade doesn't change.
|
||||
*/
|
||||
export const BACKGROUND_IMAGES: string[] = [
|
||||
'radial-gradient(120% 95% at 22% 12%, #2b3340 0%, #121620 55%, #070910 100%)',
|
||||
'radial-gradient(120% 95% at 78% 18%, #2f2b3f 0%, #16131f 55%, #08070d 100%)',
|
||||
'radial-gradient(130% 100% at 45% 85%, #1f3340 0%, #0f161c 55%, #070a0d 100%)',
|
||||
];
|
||||
15
app/src/lib/gradients.ts
Normal file
15
app/src/lib/gradients.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
/** Shared placeholder-thumbnail gradients — swap for real thumbnails once assets exist. */
|
||||
export function tone(a: string, b: string): string {
|
||||
return `linear-gradient(140deg, ${a} 0%, ${b} 100%)`;
|
||||
}
|
||||
|
||||
export const THUMB_TONES = [
|
||||
tone('#3b4a63', '#1b2230'),
|
||||
tone('#4a3f5f', '#221c2e'),
|
||||
tone('#5a4436', '#261d18'),
|
||||
tone('#33505a', '#182428'),
|
||||
tone('#46384f', '#1f1a24'),
|
||||
tone('#3d4a41', '#1b211d'),
|
||||
tone('#3a4560', '#1a1f2c'),
|
||||
tone('#51413a', '#241d19'),
|
||||
] as const;
|
||||
9
app/src/lib/validators.ts
Normal file
9
app/src/lib/validators.ts
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
const EMAIL_RE = /^[^@\s]+@[^@\s]+\.[a-z]{2,}$/i;
|
||||
|
||||
export function isValidEmail(value: string): boolean {
|
||||
return EMAIL_RE.test(value);
|
||||
}
|
||||
|
||||
export function isValidPassword(value: string): boolean {
|
||||
return value.length >= 8;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue