Fix local admin routing and landing styles

This commit is contained in:
MOH
2026-05-12 08:17:55 +02:00
parent 868eb80374
commit 8add8b018a
8 changed files with 58 additions and 62 deletions
+2 -2
View File
@@ -1,3 +1,3 @@
NEXT_PUBLIC_SITE_URL="http://mohfarawati.localhost:3000" NEXT_PUBLIC_SITE_URL="http://localhost:3014"
NEXT_PUBLIC_ADMIN_URL="http://rootmohfarawati.localhost:3000" NEXT_PUBLIC_ADMIN_URL="http://rootmohfarawati.localhost:3014"
ADMIN_HOST="rootmohfarawati.localhost" ADMIN_HOST="rootmohfarawati.localhost"
+2 -2
View File
@@ -25,8 +25,8 @@ ps:
docker compose ps docker compose ps
port: port:
@echo "Site: $${NEXT_PUBLIC_SITE_URL:-https://mohfarawati.de}" @echo "Site: http://localhost:3014"
@echo "Admin: $${NEXT_PUBLIC_ADMIN_URL:-https://root.mohfarawati.de}" @echo "Admin: http://rootmohfarawati.localhost:3014"
clean-orphans: clean-orphans:
docker compose up -d --remove-orphans docker compose up -d --remove-orphans
+1 -1
View File
@@ -14,7 +14,7 @@ pnpm dev
bun dev bun dev
``` ```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. Open [http://localhost:3014](http://localhost:3014) with your browser to see the result.
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+30 -24
View File
@@ -7,7 +7,9 @@ import { SiteLogo } from "@/components/layout/site-logo";
type AsciiWaterRippleProps = { type AsciiWaterRippleProps = {
lightLogoUrl?: string | null; lightLogoUrl?: string | null;
darkLogoUrl?: string | null; darkLogoUrl?: string | null;
logoAlt: string; logoAlt?: string;
showLogo?: boolean;
className?: string;
}; };
const glyphs = [".", ":", "+", "*", "o"]; const glyphs = [".", ":", "+", "*", "o"];
@@ -38,10 +40,12 @@ const ripplePoints = buildRipplePoints();
export function AsciiWaterRipple({ export function AsciiWaterRipple({
lightLogoUrl, lightLogoUrl,
darkLogoUrl, darkLogoUrl,
logoAlt, logoAlt = "",
showLogo = true,
className,
}: AsciiWaterRippleProps) { }: AsciiWaterRippleProps) {
return ( return (
<div className="relative flex h-[14rem] w-full items-center justify-center overflow-visible sm:h-[17rem] lg:h-[20rem]"> <div className={className ?? "relative flex h-[14rem] w-full items-center justify-center overflow-visible sm:h-[17rem] lg:h-[20rem]"}>
<motion.div <motion.div
animate={{ animate={{
scale: [0.96, 1.08, 0.98], scale: [0.96, 1.08, 0.98],
@@ -104,27 +108,29 @@ export function AsciiWaterRipple({
))} ))}
</motion.div> </motion.div>
<motion.div {showLogo && (
animate={{ <motion.div
boxShadow: [ animate={{
"0 0 0 1px hsl(var(--primary) / 0.24), 0 0 42px hsl(var(--primary) / 0.22)", boxShadow: [
"0 0 0 1px hsl(var(--primary) / 0.34), 0 0 84px hsl(var(--primary) / 0.34)", "0 0 0 1px hsl(var(--primary) / 0.24), 0 0 42px hsl(var(--primary) / 0.22)",
"0 0 0 1px hsl(var(--primary) / 0.24), 0 0 42px hsl(var(--primary) / 0.22)", "0 0 0 1px hsl(var(--primary) / 0.34), 0 0 84px hsl(var(--primary) / 0.34)",
], "0 0 0 1px hsl(var(--primary) / 0.24), 0 0 42px hsl(var(--primary) / 0.22)",
scale: [1, 1.02, 1], ],
y: [0, -3, 0], scale: [1, 1.02, 1],
}} y: [0, -3, 0],
transition={{ duration: 4.8, repeat: Number.POSITIVE_INFINITY, ease: "easeInOut" }} }}
className="relative z-10 flex h-28 w-28 items-center justify-center rounded-full border border-primary/30 bg-background/92 p-2 backdrop-blur-xl sm:h-32 sm:w-32 lg:h-40 lg:w-40" transition={{ duration: 4.8, repeat: Number.POSITIVE_INFINITY, ease: "easeInOut" }}
> className="relative z-10 flex h-28 w-28 items-center justify-center rounded-full border border-primary/30 bg-background/92 p-2 backdrop-blur-xl sm:h-32 sm:w-32 lg:h-40 lg:w-40"
<SiteLogo >
lightLogoUrl={lightLogoUrl} <SiteLogo
darkLogoUrl={darkLogoUrl} lightLogoUrl={lightLogoUrl}
alt={logoAlt} darkLogoUrl={darkLogoUrl}
priority alt={logoAlt}
className="h-full w-full object-center" priority
/> className="h-full w-full object-center"
</motion.div> />
</motion.div>
)}
</div> </div>
); );
} }
+2 -12
View File
@@ -26,19 +26,12 @@ services:
timeout: 5s timeout: 5s
retries: 10 retries: 10
start_period: 20s start_period: 20s
labels: ports:
- "traefik.enable=true" - "${PORT:-3014}:3000"
- "traefik.docker.network=proxy"
- "traefik.http.routers.sass-mohfarawati.rule=Host(`mohfarawati.de`) || Host(`www.mohfarawati.de`) || Host(`root.mohfarawati.de`)"
- "traefik.http.routers.sass-mohfarawati.entrypoints=websecure"
- "traefik.http.routers.sass-mohfarawati.tls=true"
- "traefik.http.routers.sass-mohfarawati.tls.certresolver=cf"
- "traefik.http.services.sass-mohfarawati.loadbalancer.server.port=3000"
volumes: volumes:
- media_uploads:/app/public/uploads/media - media_uploads:/app/public/uploads/media
networks: networks:
- appnet - appnet
- proxy
db: db:
image: postgres:16-alpine image: postgres:16-alpine
@@ -63,6 +56,3 @@ volumes:
networks: networks:
appnet: appnet:
proxy:
external: true
name: proxy
+6 -6
View File
@@ -30,12 +30,12 @@
}, },
"comingSoon": { "comingSoon": {
"badge": "قريباً", "badge": "قريباً",
"kicker": "مرحبا، أنا محمد", "kicker": "شيء جديد عم يتشكّل",
"titleLineOne": "الموقع", "titleLineOne": "نسخة",
"titleLineTwo": "رح يفتح", "titleLineTwo": "أقوى",
"titleLineThree": "قريباً.", "titleLineThree": "بالطريق.",
"description": "عم حضّر الموقع بحلّة جديدة، محتوى أوضح، وتجربة أرتب من أولها لآخرها.", "description": "عم بشتغل على نسخة جديدة — هوية أقوى، شغل أوضح، وتجربة مبنية من الأساس.",
"note": "إذا حابب تبلّش من هلق، ابعتلي ومنحكي بالتفاصيل.", "note": "",
"primaryCta": "تواصل معي", "primaryCta": "تواصل معي",
"secondaryCta": "العودة للرئيسية" "secondaryCta": "العودة للرئيسية"
}, },
+8 -8
View File
@@ -29,14 +29,14 @@
} }
}, },
"comingSoon": { "comingSoon": {
"badge": "Coming Soon", "badge": "Demnächst",
"kicker": "Hi, ich bin Moh", "kicker": "Etwas Neues nimmt Form an",
"titleLineOne": "Eine klarere", "titleLineOne": "Eine stärkere",
"titleLineTwo": "nächste Version", "titleLineTwo": "Version",
"titleLineThree": "ist unterwegs.", "titleLineThree": "kommt.",
"description": "Die neue Version entsteht gerade mit stärkerer Identität, klarerem Inhalt und einer fokussierteren Erfahrung von Anfang bis Ende.", "description": "Die nächste Iteration dieser Seite entsteht mit Bedacht — schärfere Arbeiten, eine klarere Identität und ein Auftritt, der wirklich zeigt, was ich tue.",
"note": "Wenn du schon ein Projekt im Kopf hast, kannst du dich jetzt melden und wir starten früh ins Gespräch.", "note": "",
"primaryCta": "Kontakt aufnehmen", "primaryCta": "Schreib mir",
"secondaryCta": "Zur Startseite" "secondaryCta": "Zur Startseite"
}, },
"homepage": { "homepage": {
+7 -7
View File
@@ -30,13 +30,13 @@
}, },
"comingSoon": { "comingSoon": {
"badge": "Coming Soon", "badge": "Coming Soon",
"kicker": "Hi, I am Moh", "kicker": "Something new is taking shape",
"titleLineOne": "A clearer", "titleLineOne": "A stronger",
"titleLineTwo": "next version", "titleLineTwo": "version",
"titleLineThree": "is on the way.", "titleLineThree": "is coming.",
"description": "The new version is being shaped with a stronger identity, cleaner content, and a more focused experience from top to bottom.", "description": "The next iteration of this site is being built with intention — sharper work, a clearer identity, and an experience that actually reflects what I do.",
"note": "If you already have a project in mind, you can reach out now and we can start the conversation early.", "note": "",
"primaryCta": "Contact me", "primaryCta": "Get in touch",
"secondaryCta": "Back to homepage" "secondaryCta": "Back to homepage"
}, },
"homepage": { "homepage": {