No description
  • TypeScript 97.8%
  • JavaScript 1%
  • CSS 0.8%
  • Dockerfile 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Guneet Aggarwal c11575aef6
All checks were successful
Release & Container Push / Prettier Format Check (push) Successful in 34s
Release & Container Push / Container Force Push (push) Has been skipped
Release & Container Push / Container Force Push (Migrate) (push) Has been skipped
Release & Container Push / Semantic Release (push) Successful in 22s
Release & Container Push / Container Push (push) Has been skipped
Release & Container Push / Container Push (Migrate) (push) Has been skipped
ci: mount docker socket into container jobs
2026-09-23 14:08:46 +05:30
.forgejo/workflows ci: mount docker socket into container jobs 2026-09-23 14:08:46 +05:30
.github/workflows ci: remove vps step 2026-06-12 18:54:10 +05:30
drizzle chore: format remix changes 2026-05-30 19:22:23 +05:30
fonts feat: package remix fonts for rendering 2026-05-30 19:19:16 +05:30
public init 2024-12-18 11:57:11 +05:30
src feat: otp based login 2026-06-12 18:52:53 +05:30
.dockerignore chore: use node 22 instead of bun 2025-10-10 16:24:27 +05:30
.env.example refactor: consolidate AUTH_URL into APP_URL 2026-03-29 12:10:23 +05:30
.gitignore chore: ignore opencode work artifacts 2026-05-30 19:19:34 +05:30
.infisical.json chore: infisical 2026-03-15 22:00:25 +05:30
.releaserc.json ci: switch semantic-release to gitea plugin, prefix third-party actions with github url 2026-09-23 13:50:01 +05:30
.rgignore chore: rgignore 2025-06-07 13:12:51 +05:30
components.json sync: migrating back to github 2025-06-07 11:35:45 +05:30
Dockerfile feat: package remix fonts for rendering 2026-05-30 19:19:16 +05:30
drizzle.config.ts feat: add lightweight migration Docker image for Kubernetes init containers (#39) 2026-04-20 01:02:56 +05:30
eslint.config.mjs chore: migrate to Next.js 16, React 19, and ESLint 9 (#34) 2026-03-16 20:50:54 +05:30
next.config.ts feat: package remix fonts for rendering 2026-05-30 19:19:16 +05:30
package-lock.json ci: switch semantic-release to gitea plugin, prefix third-party actions with github url 2026-09-23 13:50:01 +05:30
package.json ci: switch semantic-release to gitea plugin, prefix third-party actions with github url 2026-09-23 13:50:01 +05:30
postcss.config.js fix: apparently you can't just make postcss config into a typescript file 2025-10-11 18:44:35 +05:30
prettier.config.ts chore: migrated most config files to typescript 2025-10-11 18:30:34 +05:30
README.md refactor: consolidate AUTH_URL into APP_URL 2026-03-29 12:10:23 +05:30
tailwind.config.ts chore: migrate to Next.js 16, React 19, and ESLint 9 (#34) 2026-03-16 20:50:54 +05:30
tsconfig.json fix: update next.js to 16.1.7 to resolve dependabot security alerts 2026-03-17 22:41:11 +05:30

Walls

Beautiful backgrounds for your screens. A wallpaper sharing platform built with the T3 Stack.

Features

  • Browse a public gallery of wallpapers with a masonry-style layout
  • Upload wallpapers via drag-and-drop or by pasting an image URL
  • NSFW content filtering (None / Mild / All)
  • Email magic link authentication (passwordless)
  • User profiles and personal wallpaper collections
  • Invite-only mode with access request flow
  • Admin mode for managing users, invites, and wallpapers
  • Dark / light theme toggle

Tech Stack

Getting Started

Prerequisites

  • Node.js 22+
  • PostgreSQL database
  • SMTP server for magic link emails

Setup

# Install dependencies
npm ci

# Copy environment variables and fill in your values
cp .env.example .env

# Push the database schema
npm run db:push

# Start the dev server
npm run dev

Docker Compose

A sample docker-compose.yml for running Walls with PostgreSQL and Mailpit (local SMTP server for development):

services:
  walls:
    build:
      context: .
      args:
        BUILD_VERSION: dev
    ports:
      - "3000:3000"
    environment:
      APP_URL: "http://localhost:3000"
      AUTH_SECRET: "change-me-to-a-random-secret"
      SMTP_HOST: mailpit
      SMTP_PORT: "1025"
      SMTP_USERNAME: ""
      SMTP_PASSWORD: ""
      SMTP_MAIL_FROM: "noreply@localhost"
      DATABASE_URL: "postgresql://walls:walls@db:5432/walls"
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_USER: walls
      POSTGRES_PASSWORD: walls
      POSTGRES_DB: walls
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U walls"]
      interval: 5s
      timeout: 5s
      retries: 5

  mailpit:
    image: axllent/mailpit
    ports:
      - "8025:8025" # Web UI
      - "1025:1025" # SMTP

volumes:
  pgdata:

Run with:

docker compose up --build

Then open http://localhost:3000 for the app and http://localhost:8025 for the Mailpit inbox to view magic link emails.

Note: On first run you'll need to push the database schema. You can do this by running npm run db:push locally with DATABASE_URL pointed at the containerized Postgres, or by adding a migration step to the compose setup.

Environment Variables

Variable Required Description
APP_URL Yes Public-facing URL of the app (used for auth and invite emails)
AUTH_SECRET Production Auth secret — generate with openssl rand -base64 32
SMTP_HOST Yes SMTP server hostname
SMTP_PORT No SMTP port (default 587)
SMTP_USERNAME Yes SMTP auth username
SMTP_PASSWORD Yes SMTP auth password
SMTP_MAIL_FROM Yes Sender email address for magic link emails
DATABASE_URL Yes PostgreSQL connection string

See .env.example for a full template.

Scripts

Command Description
npm run dev Start dev server (Turbopack)
npm run build Production build
npm run start Start production server
npm run preview Build + start
npm run db:generate Generate Drizzle migrations
npm run db:migrate Run Drizzle migrations
npm run db:push Push schema directly to the database
npm run db:studio Open Drizzle Studio
npm run check ESLint + TypeScript type-check
npm run format:check Prettier format check
npm run format:write Prettier auto-format

Contributing

See CONTRIBUTING.md for guidelines on setting up a development environment and submitting changes.

Deployment

The project includes a multi-stage Dockerfile and GitHub Actions workflows for CI/CD:

  • PR checks: Docker build test, Prettier format check, npm build
  • Push to main: Semantic release, Docker build + push, SSH deploy to VPS