From bc8a76b9f567529af7e7ba94a9e37fa28aa7a317 Mon Sep 17 00:00:00 2001 From: Zias van Nes Date: Sun, 28 Sep 2025 15:02:54 +0200 Subject: [PATCH] feat:improved ui for login --- .env.example | 35 ++++++++-- Dockerfile | 2 +- docker-compose.yml | 19 ----- src/app.css | 43 ++++++++++++ src/routes/login/+page.svelte | 49 +++++++++---- src/routes/login/login.css | 115 +++++++++++++++++++++++++++++++ src/stories/Login.stories.svelte | 35 ++++++++++ src/stories/Login.svelte | 47 +++++++++++++ static/fonts/Washington.ttf | Bin 0 -> 56644 bytes 9 files changed, 306 insertions(+), 39 deletions(-) create mode 100644 src/routes/login/login.css create mode 100644 src/stories/Login.stories.svelte create mode 100644 src/stories/Login.svelte create mode 100644 static/fonts/Washington.ttf diff --git a/.env.example b/.env.example index 0631423..87ac666 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,30 @@ -DATABASE_URL="postgres://root:mysecretpassword@localhost:5432/local" -POSTGRES_USER=root -POSTGRES_PASSWORD=mysecretpassword -POSTGRES_DB=local -PROJECT_TOKEN=CHROMATIC_PROJECT_TOKEN +# Chromatic token +PROJECT_TOKEN=**************************** + +# Recommended for most uses +DATABASE_URL=**************************** + +# For uses requiring a connection without pgbouncer +DATABASE_URL_UNPOOLED=**************************** + +# Parameters for constructing your own connection string +PGHOST=**************************** +PGHOST_UNPOOLED=**************************** +PGUSER=**************************** +PGDATABASE=**************************** +PGPASSWORD=**************************** + +# Parameters for Vercel Postgres Templates +POSTGRES_URL=**************************** +POSTGRES_URL_NON_POOLING=**************************** +POSTGRES_USER=**************************** +POSTGRES_HOST=**************************** +POSTGRES_PASSWORDL=**************************** +POSTGRES_DATABASEL=**************************** +POSTGRES_URL_NO_SSL=**************************** +POSTGRES_PRISMA_URL=**************************** + +# Neon Auth environment variables for Next.js +NEXT_PUBLIC_STACK_PROJECT_ID=**************************** +NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=**************************************** +STACK_SECRET_SERVER_KEY=*********************** diff --git a/Dockerfile b/Dockerfile index 1d719cd..a7b0188 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ COPY package.json ./ RUN npm install COPY . . RUN DATABASE_URL="postgres://user:pass@localhost:5432/db" npm run build - +# DATABASE_URL is only needed at build time for Prisma to generate the client. It is not needed at runtime and will be replaced by the hosted neon database. FROM node:20-alpine AS runner WORKDIR /app COPY --from=builder /app ./ diff --git a/docker-compose.yml b/docker-compose.yml index 9eb11a9..8433ee6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,26 +1,7 @@ services: - db: - image: postgres - restart: always - ports: - - 5432:5432 - env_file: - - .env - environment: - POSTGRES_USER: ${POSTGRES_USER:-root} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mysecretpassword} - POSTGRES_DB: ${POSTGRES_DB:-local} - volumes: - - pgdata:/var/lib/postgresql/data app: build: . ports: - 3000:3000 env_file: - .env - environment: - DATABASE_URL: postgres://${POSTGRES_USER:-root}:${POSTGRES_PASSWORD:-mysecretpassword}@db:5432/${POSTGRES_DB:-local} - depends_on: - - db -volumes: - pgdata: diff --git a/src/app.css b/src/app.css index e69de29..97e8a0f 100644 --- a/src/app.css +++ b/src/app.css @@ -0,0 +1,43 @@ +@font-face { + font-family: 'Washington'; + src: url('/fonts/Washington.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + line-height: 1.5; + background-color: #f8f8f8; + color: #333; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'Washington', serif; + font-weight: normal; +} + +button { + cursor: pointer; + font-family: inherit; +} + +input { + font-family: inherit; +} + +a { + color: inherit; + text-decoration: none; +} diff --git a/src/routes/login/+page.svelte b/src/routes/login/+page.svelte index a3138d7..5aa08b6 100644 --- a/src/routes/login/+page.svelte +++ b/src/routes/login/+page.svelte @@ -1,21 +1,42 @@ -

Login/Register

-
- - - - -
-

{form?.message ?? ''}

+
+

Serengo

+ + + + {#if form?.message} +

{form.message}

+ {/if} +
diff --git a/src/routes/login/login.css b/src/routes/login/login.css new file mode 100644 index 0000000..e21bec5 --- /dev/null +++ b/src/routes/login/login.css @@ -0,0 +1,115 @@ +.login-container { + display: flex; + flex-direction: column; + min-height: 100vh; + padding: 4rem 2rem; + background-color: #f8f8f8; + align-items: center; + justify-content: flex-start; + max-width: 400px; + margin: 0 auto; +} + +.login-title { + font-family: 'Washington', serif; + font-size: 3.5rem; + color: #000000; + margin-bottom: 6rem; + text-align: center; + font-weight: normal; + letter-spacing: -0.02em; +} + +.login-form { + display: flex; + flex-direction: column; + width: 100%; + gap: 1.5rem; +} + +.input-group { + display: flex; + flex-direction: column; +} + +.input-field { + padding: 1.25rem 1.5rem; + border: none; + border-radius: 2rem; + background-color: #e0e0e0; + font-size: 1rem; + color: #333; + outline: none; + transition: background-color 0.2s ease; + height: 3.5rem; +} + +.input-field:focus { + background-color: #d5d5d5; +} + +.input-field::placeholder { + color: #888; +} + +.button-group { + display: flex; + gap: 1rem; +} + +.login-button, +.register-button { + flex: 1; + padding: 1.25rem 2rem; + border: none; + border-radius: 2rem; + font-size: 1rem; + font-weight: 500; + transition: all 0.2s ease; + cursor: pointer; + height: 3.5rem; +} + +.login-button { + background-color: #3a4553; + color: white; +} + +.login-button:hover { + background-color: #2d3441; + transform: translateY(-1px); +} + +.register-button { + background-color: #3a4553; + color: white; +} + +.register-button:hover { + background-color: #2d3441; + transform: translateY(-1px); +} + +.error-message { + color: #e53e3e; + font-size: 0.875rem; + text-align: center; + margin-top: 1rem; + padding: 0.5rem; +} + +/* Mobile responsiveness */ +@media (max-width: 480px) { + .login-container { + padding: 3rem 1.5rem; + } + + .login-title { + font-size: 3rem; + margin-bottom: 4rem; + } + + .button-group { + margin-top: 3rem; + } +} diff --git a/src/stories/Login.stories.svelte b/src/stories/Login.stories.svelte new file mode 100644 index 0000000..0bf3b9f --- /dev/null +++ b/src/stories/Login.stories.svelte @@ -0,0 +1,35 @@ + + + + + diff --git a/src/stories/Login.svelte b/src/stories/Login.svelte new file mode 100644 index 0000000..182f278 --- /dev/null +++ b/src/stories/Login.svelte @@ -0,0 +1,47 @@ + + + diff --git a/static/fonts/Washington.ttf b/static/fonts/Washington.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fd342437619604a93c66a8622f1046a4f6dcc83a GIT binary patch literal 56644 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