fix(01): remove traefik, lighten dark mode, fix sidebar accent color, move locale switcher to sidebar footer
This commit is contained in:
@@ -59,23 +59,23 @@
|
|||||||
/* Sidebar tokens */
|
/* Sidebar tokens */
|
||||||
--sidebar: oklch(0.97 0 0);
|
--sidebar: oklch(0.97 0 0);
|
||||||
--sidebar-foreground: oklch(0.15 0 0);
|
--sidebar-foreground: oklch(0.15 0 0);
|
||||||
--sidebar-accent: oklch(0.91 0.19 102 / 0.1);
|
--sidebar-accent: oklch(0.93 0 0);
|
||||||
--sidebar-accent-foreground: oklch(0.91 0.19 102);
|
--sidebar-accent-foreground: oklch(0.25 0 0);
|
||||||
--sidebar-border: oklch(0.90 0 0);
|
--sidebar-border: oklch(0.90 0 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
--background: oklch(0.17 0.01 260);
|
--background: oklch(0.23 0.01 260);
|
||||||
--foreground: oklch(0.95 0 0);
|
--foreground: oklch(0.95 0 0);
|
||||||
--card: oklch(0.21 0.01 260);
|
--card: oklch(0.27 0.01 260);
|
||||||
--card-foreground: oklch(0.95 0 0);
|
--card-foreground: oklch(0.95 0 0);
|
||||||
--primary: oklch(0.91 0.19 102);
|
--primary: oklch(0.91 0.19 102);
|
||||||
--primary-foreground: oklch(0.20 0.02 90);
|
--primary-foreground: oklch(0.20 0.02 90);
|
||||||
--secondary: oklch(0.25 0.01 260);
|
--secondary: oklch(0.30 0.01 260);
|
||||||
--secondary-foreground: oklch(0.95 0 0);
|
--secondary-foreground: oklch(0.95 0 0);
|
||||||
--muted: oklch(0.25 0.01 260);
|
--muted: oklch(0.30 0.01 260);
|
||||||
--muted-foreground: oklch(0.65 0 0);
|
--muted-foreground: oklch(0.65 0 0);
|
||||||
--accent: oklch(0.25 0.01 260);
|
--accent: oklch(0.30 0.01 260);
|
||||||
--accent-foreground: oklch(0.95 0 0);
|
--accent-foreground: oklch(0.95 0 0);
|
||||||
--destructive: oklch(0.55 0.2 27);
|
--destructive: oklch(0.55 0.2 27);
|
||||||
--destructive-foreground: oklch(0.98 0 0);
|
--destructive-foreground: oklch(0.98 0 0);
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
--ring: oklch(0.91 0.19 102);
|
--ring: oklch(0.91 0.19 102);
|
||||||
|
|
||||||
/* Sidebar tokens (dark) */
|
/* Sidebar tokens (dark) */
|
||||||
--sidebar: oklch(0.14 0.01 260);
|
--sidebar: oklch(0.20 0.01 260);
|
||||||
--sidebar-foreground: oklch(0.95 0 0);
|
--sidebar-foreground: oklch(0.95 0 0);
|
||||||
--sidebar-accent: oklch(0.91 0.19 102 / 0.15);
|
--sidebar-accent: oklch(0.91 0.19 102 / 0.15);
|
||||||
--sidebar-accent-foreground: oklch(0.91 0.19 102);
|
--sidebar-accent-foreground: oklch(0.91 0.19 102);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useSidebarStore } from '@/lib/stores/sidebar-store';
|
import { useSidebarStore } from '@/lib/stores/sidebar-store';
|
||||||
import { ThemeToggle } from '@/components/theme-toggle';
|
import { ThemeToggle } from '@/components/theme-toggle';
|
||||||
import { LocaleSwitcher } from '@/components/locale-switcher';
|
|
||||||
|
|
||||||
export function Header() {
|
export function Header() {
|
||||||
const t = useTranslations();
|
const t = useTranslations();
|
||||||
@@ -49,7 +48,6 @@ export function Header() {
|
|||||||
{/* Right: Actions */}
|
{/* Right: Actions */}
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<ThemeToggle />
|
<ThemeToggle />
|
||||||
<LocaleSwitcher />
|
|
||||||
{/* User avatar placeholder - wired to auth in Phase 2 */}
|
{/* User avatar placeholder - wired to auth in Phase 2 */}
|
||||||
<div
|
<div
|
||||||
className="h-8 w-8 rounded-full bg-muted flex items-center justify-center text-xs text-muted-foreground"
|
className="h-8 w-8 rounded-full bg-muted flex items-center justify-center text-xs text-muted-foreground"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { useSidebarStore } from '@/lib/stores/sidebar-store';
|
import { useSidebarStore } from '@/lib/stores/sidebar-store';
|
||||||
|
import { LocaleSwitcher } from '@/components/locale-switcher';
|
||||||
|
|
||||||
export function SidebarFooter() {
|
export function SidebarFooter() {
|
||||||
const t = useTranslations('sidebar');
|
const t = useTranslations('sidebar');
|
||||||
@@ -9,6 +10,13 @@ export function SidebarFooter() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="border-t border-sidebar-border p-3 flex flex-col gap-2">
|
<div className="border-t border-sidebar-border p-3 flex flex-col gap-2">
|
||||||
|
{/* Locale switcher */}
|
||||||
|
{!isCollapsed && (
|
||||||
|
<div className="px-2 py-1">
|
||||||
|
<LocaleSwitcher />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* Settings */}
|
{/* Settings */}
|
||||||
<button className="flex items-center gap-3 rounded-md px-2 py-1.5 text-sm text-sidebar-foreground hover:bg-muted transition-colors">
|
<button className="flex items-center gap-3 rounded-md px-2 py-1.5 text-sm text-sidebar-foreground hover:bg-muted transition-colors">
|
||||||
<svg
|
<svg
|
||||||
|
|||||||
+5
-30
@@ -1,43 +1,26 @@
|
|||||||
services:
|
services:
|
||||||
traefik:
|
|
||||||
image: traefik:v2.11
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
command:
|
|
||||||
- "--api.insecure=true"
|
|
||||||
- "--providers.docker=true"
|
|
||||||
- "--providers.docker.exposedbydefault=false"
|
|
||||||
environment:
|
|
||||||
DOCKER_API_VERSION: "1.40"
|
|
||||||
networks:
|
|
||||||
- frontend-net
|
|
||||||
- backend-net
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
|
|
||||||
web:
|
web:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: apps/web/Dockerfile
|
dockerfile: apps/web/Dockerfile
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
environment:
|
environment:
|
||||||
HOSTNAME: "0.0.0.0"
|
HOSTNAME: "0.0.0.0"
|
||||||
|
NEXT_PUBLIC_API_URL: "http://localhost:3001"
|
||||||
networks:
|
networks:
|
||||||
- frontend-net
|
- frontend-net
|
||||||
- backend-net
|
- backend-net
|
||||||
depends_on:
|
depends_on:
|
||||||
api:
|
api:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.web.rule=PathPrefix(`/`)"
|
|
||||||
- "traefik.http.services.web.loadbalancer.server.port=3000"
|
|
||||||
- "traefik.http.routers.web.priority=1"
|
|
||||||
- "traefik.docker.network=tessera-ctl_frontend-net"
|
|
||||||
|
|
||||||
api:
|
api:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: apps/api/Dockerfile
|
dockerfile: apps/api/Dockerfile
|
||||||
|
ports:
|
||||||
|
- "3001:3001"
|
||||||
networks:
|
networks:
|
||||||
- backend-net
|
- backend-net
|
||||||
- data-net
|
- data-net
|
||||||
@@ -52,14 +35,6 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 10s
|
start_period: 10s
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.api.rule=PathPrefix(`/api`)"
|
|
||||||
- "traefik.http.services.api.loadbalancer.server.port=3001"
|
|
||||||
- "traefik.http.routers.api.priority=2"
|
|
||||||
- "traefik.http.middlewares.api-strip.stripprefix.prefixes=/api"
|
|
||||||
- "traefik.http.routers.api.middlewares=api-strip"
|
|
||||||
- "traefik.docker.network=tessera-ctl_backend-net"
|
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
|
|||||||
Reference in New Issue
Block a user