No description
Find a file
gucheen 8cc5b600f1
All checks were successful
ci/woodpecker/push/deploy Pipeline was successful
feat: upload
2026-02-04 17:03:43 +08:00
.woodpecker fix: port 2026-02-04 12:33:06 +08:00
public init 2026-02-03 10:54:07 +08:00
scripts feat: bundle 2026-02-03 16:33:11 +08:00
server feat: batch updtes 2026-02-04 16:38:34 +08:00
src feat: upload 2026-02-04 17:03:43 +08:00
types feat: tags 2026-02-04 11:12:50 +08:00
.dockerignore init 2026-02-03 10:54:07 +08:00
.editorconfig init 2026-02-03 10:54:07 +08:00
.env.example init 2026-02-03 10:54:07 +08:00
.gitignore init 2026-02-03 10:54:07 +08:00
.prettierrc init 2026-02-03 10:54:07 +08:00
Dockerfile ci: copy pnpm-workspace.yaml 2026-02-04 14:07:46 +08:00
entrypoint.sh docker: maynot need that 2026-02-04 14:09:46 +08:00
index.html feat: batch updtes 2026-02-04 16:38:34 +08:00
LICENSE init 2026-02-03 10:54:07 +08:00
package.json feat: batch updtes 2026-02-04 16:38:34 +08:00
pnpm-lock.yaml feat: batch updtes 2026-02-04 16:38:34 +08:00
pnpm-workspace.yaml feat: sqlite 2026-02-04 14:00:19 +08:00
README.md feat: README 2026-02-03 16:11:16 +08:00
tsconfig.json init 2026-02-03 10:54:07 +08:00
tsconfig.server.json feat: migrate to node 2026-02-03 16:01:37 +08:00
vite.config.ts feat: remove analyzer 2026-02-03 16:36:08 +08:00

PicWall2

A modern photo wall application built with Node.js, Hono, React, and Vite.

Features

  • Performance: High-speed backend with Hono and Node.js.
  • Modern Frontend: Built with React and Vite.
  • Authentication: Integrated with PocketID via OpenID Connect.
  • Auto-Thumbnails: Automatic EXIF extraction and thumbnail generation using sharp.
  • Flexible Storage: Supports both local filesystem and S3-compatible object storage (e.g., Cloudflare R2, AWS S3).

Prerequisites

  • Node.js: v20 or higher.
  • pnpm: Recommended package manager.

Getting Started

  1. Install Dependencies

    pnpm install
    
  2. Environment Configuration

    Copy the example environment file:

    cp .env.example .env.local
    

    Configure .env.local with your details:

    # Authentication (PocketID)
    POCKETID_CLIENT_ID="your_client_id"
    POCKETID_CLIENT_SECRET="your_client_secret"
    POCKETID_ISSUER="https://your-pocket-id-instance.com"
    ADMIN_EMAIL="admin@example.com"
    
    # Storage Configuration
    # Options: 'local' (default) or 's3'
    STORAGE_TYPE="local"
    
    # S3 Configuration (Required if STORAGE_TYPE="s3")
    S3_ENDPOINT="https://<accountid>.r2.cloudflarestorage.com"
    S3_BUCKET="picwall-bucket"
    S3_ACCESS_KEY_ID="your_access_key"
    S3_SECRET_ACCESS_KEY="your_secret_key"
    # Optional: Public CDN URL for serving images
    S3_CDN_URL="https://cdn.example.com"
    
  3. Run Development Server

    Start both backend and frontend in watch mode:

    npm run dev
    
  4. Production Build

    Build the frontend and server for production:

    npm run build
    npm start
    

Project Structure

  • src/: Frontend React application.
  • server/: Backend Hono application.
    • index.ts: Server entry point.
    • photos.ts: Photo processing logic.
    • storage.ts: Storage adapters (Local/S3).
    • auth.ts: Authentication handlers.
  • public/: Static assets (default local storage location).
  • dist/: production build output.

License

MIT