ui-syncup 0.2.4 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -53
- package/dist/index.js +625 -22465
- package/package.json +17 -22
- package/templates/Dockerfile.template +0 -64
- package/templates/README.md +0 -18
- package/templates/docker-compose.override.template.yml +0 -39
- package/templates/dockerignore.template +0 -63
- package/templates/env.local.template +0 -74
- package/templates/env.production.template +0 -84
package/package.json
CHANGED
|
@@ -1,35 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ui-syncup",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"homepage": "https://github.com/BYKHD/ui-syncup",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/BYKHD/ui-syncup.git"
|
|
10
|
-
},
|
|
11
|
-
"bugs": {
|
|
12
|
-
"url": "https://github.com/BYKHD/ui-syncup/issues"
|
|
13
|
-
},
|
|
3
|
+
"version": "0.3.10",
|
|
4
|
+
"description": "Self-host UI SyncUp with a single command",
|
|
14
5
|
"bin": {
|
|
15
|
-
"ui-syncup": "dist/index.js"
|
|
6
|
+
"ui-syncup": "./dist/index.js"
|
|
16
7
|
},
|
|
17
8
|
"files": [
|
|
18
|
-
"dist"
|
|
19
|
-
"templates"
|
|
9
|
+
"dist"
|
|
20
10
|
],
|
|
21
|
-
"engines": {
|
|
22
|
-
"node": ">=20"
|
|
23
|
-
},
|
|
24
11
|
"scripts": {
|
|
25
12
|
"build": "tsup",
|
|
26
|
-
"
|
|
13
|
+
"dev": "tsup --watch"
|
|
27
14
|
},
|
|
28
15
|
"dependencies": {
|
|
29
|
-
"commander": "^12.0.0"
|
|
16
|
+
"commander": "^12.0.0",
|
|
17
|
+
"@inquirer/prompts": "^8.0.0",
|
|
18
|
+
"chalk": "^5.3.0",
|
|
19
|
+
"ora": "^8.0.0"
|
|
30
20
|
},
|
|
31
21
|
"devDependencies": {
|
|
32
|
-
"tsup": "^8.
|
|
33
|
-
"typescript": "^5"
|
|
34
|
-
|
|
22
|
+
"tsup": "^8.0.0",
|
|
23
|
+
"typescript": "^5.0.0",
|
|
24
|
+
"@types/node": "^20.0.0"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=20"
|
|
28
|
+
},
|
|
29
|
+
"license": "MIT"
|
|
35
30
|
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# ============================================================================
|
|
2
|
-
# Multi-Stage Production Dockerfile for UI SyncUp
|
|
3
|
-
# ============================================================================
|
|
4
|
-
# Generated by: bunx ui-syncup init --mode production
|
|
5
|
-
# Optimized for self-hosting on AWS, Dokploy, Coolify, Railway, Fly.io
|
|
6
|
-
#
|
|
7
|
-
# Build: docker build -t ui-syncup .
|
|
8
|
-
# Run: docker run -p 3000:3000 --env-file .env.production ui-syncup
|
|
9
|
-
# ============================================================================
|
|
10
|
-
|
|
11
|
-
# ---------------------------------------------------------------------------
|
|
12
|
-
# Stage 1: Install dependencies
|
|
13
|
-
# ---------------------------------------------------------------------------
|
|
14
|
-
FROM oven/bun:1-alpine AS deps
|
|
15
|
-
|
|
16
|
-
WORKDIR /app
|
|
17
|
-
|
|
18
|
-
# Copy dependency manifests only (cache layer)
|
|
19
|
-
COPY package.json bun.lock* ./
|
|
20
|
-
|
|
21
|
-
RUN bun install --frozen-lockfile --production=false
|
|
22
|
-
|
|
23
|
-
# ---------------------------------------------------------------------------
|
|
24
|
-
# Stage 2: Build the application
|
|
25
|
-
# ---------------------------------------------------------------------------
|
|
26
|
-
FROM oven/bun:1-alpine AS builder
|
|
27
|
-
|
|
28
|
-
WORKDIR /app
|
|
29
|
-
|
|
30
|
-
COPY --from=deps /app/node_modules ./node_modules
|
|
31
|
-
COPY . .
|
|
32
|
-
|
|
33
|
-
# Next.js standalone output collects only the files needed for production
|
|
34
|
-
ENV NEXT_TELEMETRY_DISABLED=1
|
|
35
|
-
ENV NODE_ENV=production
|
|
36
|
-
|
|
37
|
-
RUN bun run build
|
|
38
|
-
|
|
39
|
-
# ---------------------------------------------------------------------------
|
|
40
|
-
# Stage 3: Production runtime (minimal image)
|
|
41
|
-
# ---------------------------------------------------------------------------
|
|
42
|
-
FROM node:20-alpine AS runner
|
|
43
|
-
|
|
44
|
-
WORKDIR /app
|
|
45
|
-
|
|
46
|
-
ENV NODE_ENV=production
|
|
47
|
-
ENV NEXT_TELEMETRY_DISABLED=1
|
|
48
|
-
ENV HOSTNAME="0.0.0.0"
|
|
49
|
-
ENV PORT=3000
|
|
50
|
-
|
|
51
|
-
# Create non-root user for security
|
|
52
|
-
RUN addgroup --system --gid 1001 nodejs && \
|
|
53
|
-
adduser --system --uid 1001 nextjs
|
|
54
|
-
|
|
55
|
-
# Copy standalone output
|
|
56
|
-
COPY --from=builder /app/public ./public
|
|
57
|
-
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
58
|
-
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
59
|
-
|
|
60
|
-
USER nextjs
|
|
61
|
-
|
|
62
|
-
EXPOSE 3000
|
|
63
|
-
|
|
64
|
-
CMD ["node", "server.js"]
|
package/templates/README.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# CLI Templates
|
|
2
|
-
|
|
3
|
-
This directory contains template files used by the `init` command to generate environment and configuration files.
|
|
4
|
-
|
|
5
|
-
## Files
|
|
6
|
-
|
|
7
|
-
- `env.local.template` - Local development environment template (MinIO S3-compatible storage)
|
|
8
|
-
- `env.production.template` - Production environment template
|
|
9
|
-
- `docker-compose.override.template.yml` - Docker Compose customization template
|
|
10
|
-
|
|
11
|
-
## Template Syntax
|
|
12
|
-
|
|
13
|
-
Templates use `{{VARIABLE}}` placeholders that are replaced during file generation:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
DATABASE_URL="{{DATABASE_URL}}"
|
|
17
|
-
BETTER_AUTH_SECRET="{{RANDOM_SECRET}}"
|
|
18
|
-
```
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# ============================================================================
|
|
2
|
-
# Docker Compose Override for Local Development
|
|
3
|
-
# ============================================================================
|
|
4
|
-
# Generated by: ui-syncup init
|
|
5
|
-
#
|
|
6
|
-
# Use this file to customize your local development environment.
|
|
7
|
-
# This file is merged with the main docker-compose.yml.
|
|
8
|
-
#
|
|
9
|
-
# Common customizations:
|
|
10
|
-
# - Expose additional ports
|
|
11
|
-
# - Mount additional volumes
|
|
12
|
-
# - Override environment variables
|
|
13
|
-
# - Add development-only services
|
|
14
|
-
#
|
|
15
|
-
# DO NOT commit this file to version control.
|
|
16
|
-
# ============================================================================
|
|
17
|
-
|
|
18
|
-
version: "3.8"
|
|
19
|
-
|
|
20
|
-
services:
|
|
21
|
-
# Application service – SMTP environment variable pass-through
|
|
22
|
-
# Uncomment and populate SMTP_* variables in your .env.local to route
|
|
23
|
-
# emails through a self-hosted mail server instead of Resend.
|
|
24
|
-
app:
|
|
25
|
-
environment:
|
|
26
|
-
- SMTP_HOST=${SMTP_HOST:-}
|
|
27
|
-
- SMTP_PORT=${SMTP_PORT:-}
|
|
28
|
-
- SMTP_USER=${SMTP_USER:-}
|
|
29
|
-
- SMTP_PASSWORD=${SMTP_PASSWORD:-}
|
|
30
|
-
- SMTP_FROM_EMAIL=${SMTP_FROM_EMAIL:-}
|
|
31
|
-
- SMTP_SECURE=${SMTP_SECURE:-}
|
|
32
|
-
|
|
33
|
-
# Example: Add a local mail server for testing
|
|
34
|
-
# mailpit:
|
|
35
|
-
# image: axllent/mailpit:latest
|
|
36
|
-
# ports:
|
|
37
|
-
# - "1025:1025" # SMTP
|
|
38
|
-
# - "8025:8025" # Web UI (http://localhost:8025)
|
|
39
|
-
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# ============================================================================
|
|
2
|
-
# Docker Ignore – UI SyncUp Production Build
|
|
3
|
-
# ============================================================================
|
|
4
|
-
# Generated by: bunx ui-syncup init --mode production
|
|
5
|
-
# Keeps Docker build context lean and secure.
|
|
6
|
-
# ============================================================================
|
|
7
|
-
|
|
8
|
-
# Dependencies (re-installed inside Docker)
|
|
9
|
-
node_modules
|
|
10
|
-
.bun
|
|
11
|
-
|
|
12
|
-
# Build output (rebuilt inside Docker)
|
|
13
|
-
.next
|
|
14
|
-
out
|
|
15
|
-
|
|
16
|
-
# Version control
|
|
17
|
-
.git
|
|
18
|
-
.gitignore
|
|
19
|
-
|
|
20
|
-
# Environment files (mounted at runtime, never baked in)
|
|
21
|
-
.env*
|
|
22
|
-
!.env.example
|
|
23
|
-
|
|
24
|
-
# Development & testing
|
|
25
|
-
tests
|
|
26
|
-
**/*.test.ts
|
|
27
|
-
**/*.test.tsx
|
|
28
|
-
**/*.spec.ts
|
|
29
|
-
**/*.spec.tsx
|
|
30
|
-
**/__tests__
|
|
31
|
-
coverage
|
|
32
|
-
playwright-report
|
|
33
|
-
test-results
|
|
34
|
-
|
|
35
|
-
# Documentation & AI context
|
|
36
|
-
docs
|
|
37
|
-
.ai
|
|
38
|
-
.agents
|
|
39
|
-
.gemini
|
|
40
|
-
*.md
|
|
41
|
-
!README.md
|
|
42
|
-
|
|
43
|
-
# IDE & tools
|
|
44
|
-
.vscode
|
|
45
|
-
.idea
|
|
46
|
-
*.swp
|
|
47
|
-
*.swo
|
|
48
|
-
*~
|
|
49
|
-
|
|
50
|
-
# Storage (runtime data)
|
|
51
|
-
storage
|
|
52
|
-
|
|
53
|
-
# Supabase local dev
|
|
54
|
-
supabase/.temp
|
|
55
|
-
|
|
56
|
-
# Docker files (don't recurse)
|
|
57
|
-
Dockerfile
|
|
58
|
-
docker-compose*.yml
|
|
59
|
-
.dockerignore
|
|
60
|
-
|
|
61
|
-
# Misc
|
|
62
|
-
*.log
|
|
63
|
-
tmp
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# ============================================================================
|
|
2
|
-
# UI SyncUp Local Development Environment
|
|
3
|
-
# ============================================================================
|
|
4
|
-
# Generated by: ui-syncup init
|
|
5
|
-
# Mode: Local Development (Supabase CLI + MinIO)
|
|
6
|
-
#
|
|
7
|
-
# This file contains safe defaults for local development.
|
|
8
|
-
# DO NOT commit this file to version control.
|
|
9
|
-
# ============================================================================
|
|
10
|
-
|
|
11
|
-
# Application
|
|
12
|
-
NODE_ENV="development"
|
|
13
|
-
NEXT_PUBLIC_APP_URL="http://localhost:3000"
|
|
14
|
-
NEXT_PUBLIC_API_URL="http://localhost:3000/api"
|
|
15
|
-
|
|
16
|
-
# Database (Supabase Local)
|
|
17
|
-
DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:54322/postgres"
|
|
18
|
-
DIRECT_URL="postgresql://postgres:postgres@127.0.0.1:54322/postgres"
|
|
19
|
-
|
|
20
|
-
# Supabase Local (NEXT_PUBLIC_* for browser access)
|
|
21
|
-
NEXT_PUBLIC_SUPABASE_URL="http://127.0.0.1:54321"
|
|
22
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0"
|
|
23
|
-
SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU"
|
|
24
|
-
|
|
25
|
-
# Storage (MinIO S3-compatible local storage)
|
|
26
|
-
# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD are generated by 'ui-syncup init'.
|
|
27
|
-
# To regenerate, run: ui-syncup reset
|
|
28
|
-
STORAGE_ENDPOINT="http://localhost:9000"
|
|
29
|
-
STORAGE_REGION="us-east-1"
|
|
30
|
-
STORAGE_ACCESS_KEY="{{MINIO_ROOT_USER}}"
|
|
31
|
-
STORAGE_SECRET_KEY="{{MINIO_ROOT_PASSWORD}}"
|
|
32
|
-
STORAGE_BUCKET="ui-syncup-attachments"
|
|
33
|
-
MINIO_ROOT_USER="{{MINIO_ROOT_USER}}"
|
|
34
|
-
MINIO_ROOT_PASSWORD="{{MINIO_ROOT_PASSWORD}}"
|
|
35
|
-
|
|
36
|
-
# Auth (better-auth)
|
|
37
|
-
BETTER_AUTH_SECRET="{{BETTER_AUTH_SECRET}}"
|
|
38
|
-
BETTER_AUTH_URL="http://localhost:3000"
|
|
39
|
-
|
|
40
|
-
# ============================================================================
|
|
41
|
-
# Optional: OAuth Providers
|
|
42
|
-
# ============================================================================
|
|
43
|
-
# Leave empty for email/password only authentication
|
|
44
|
-
# Configure these to enable social login
|
|
45
|
-
|
|
46
|
-
# Google OAuth (https://console.cloud.google.com/apis/credentials)
|
|
47
|
-
# Set all three values to enable Google OAuth.
|
|
48
|
-
GOOGLE_CLIENT_ID=""
|
|
49
|
-
GOOGLE_CLIENT_SECRET=""
|
|
50
|
-
GOOGLE_REDIRECT_URI=""
|
|
51
|
-
|
|
52
|
-
# Microsoft OAuth (https://portal.azure.com)
|
|
53
|
-
MICROSOFT_CLIENT_ID=""
|
|
54
|
-
MICROSOFT_CLIENT_SECRET=""
|
|
55
|
-
MICROSOFT_TENANT_ID="common"
|
|
56
|
-
|
|
57
|
-
# ============================================================================
|
|
58
|
-
# Optional: Email Service
|
|
59
|
-
# ============================================================================
|
|
60
|
-
# Leave empty to use console logging (emails printed to terminal).
|
|
61
|
-
# Configure ONE of the two options below:
|
|
62
|
-
|
|
63
|
-
# Option A: Resend (https://resend.com/api-keys)
|
|
64
|
-
RESEND_API_KEY=""
|
|
65
|
-
RESEND_FROM_EMAIL=""
|
|
66
|
-
|
|
67
|
-
# Option B: SMTP (self-hosted mail server – Mailcow, Mailpit, Postfix, AWS SES, etc.)
|
|
68
|
-
# When SMTP_HOST is set, all fields below are required.
|
|
69
|
-
# SMTP_HOST=""
|
|
70
|
-
# SMTP_PORT="587"
|
|
71
|
-
# SMTP_USER=""
|
|
72
|
-
# SMTP_PASSWORD=""
|
|
73
|
-
# SMTP_FROM_EMAIL=""
|
|
74
|
-
# SMTP_SECURE="false"
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# ============================================================================
|
|
2
|
-
# UI SyncUp Production Environment
|
|
3
|
-
# ============================================================================
|
|
4
|
-
# Generated by: ui-syncup init
|
|
5
|
-
# Mode: Production
|
|
6
|
-
#
|
|
7
|
-
# Fill in the placeholders below with your production credentials.
|
|
8
|
-
# DO NOT commit this file to version control.
|
|
9
|
-
# ============================================================================
|
|
10
|
-
|
|
11
|
-
# ============================================================================
|
|
12
|
-
# Required Configuration
|
|
13
|
-
# ============================================================================
|
|
14
|
-
|
|
15
|
-
# Node Environment
|
|
16
|
-
NODE_ENV="production"
|
|
17
|
-
|
|
18
|
-
# Application URLs
|
|
19
|
-
NEXT_PUBLIC_APP_URL="{{APP_URL}}"
|
|
20
|
-
NEXT_PUBLIC_API_URL="{{APP_URL}}/api"
|
|
21
|
-
|
|
22
|
-
# Database (External PostgreSQL)
|
|
23
|
-
# Get these from your Supabase dashboard or PostgreSQL provider
|
|
24
|
-
DATABASE_URL="{{DATABASE_URL}}"
|
|
25
|
-
DIRECT_URL="{{DIRECT_URL}}"
|
|
26
|
-
|
|
27
|
-
# Authentication (better-auth)
|
|
28
|
-
BETTER_AUTH_SECRET="{{BETTER_AUTH_SECRET}}"
|
|
29
|
-
BETTER_AUTH_URL="{{APP_URL}}"
|
|
30
|
-
|
|
31
|
-
# Storage (S3-compatible / R2)
|
|
32
|
-
# Production uses Unified S3-compatible configuration
|
|
33
|
-
STORAGE_ENDPOINT="{{STORAGE_ENDPOINT}}"
|
|
34
|
-
STORAGE_REGION="{{STORAGE_REGION}}"
|
|
35
|
-
STORAGE_ACCESS_KEY_ID="{{STORAGE_ACCESS_KEY_ID}}"
|
|
36
|
-
STORAGE_SECRET_ACCESS_KEY="{{STORAGE_SECRET_ACCESS_KEY}}"
|
|
37
|
-
|
|
38
|
-
# Storage Buckets
|
|
39
|
-
STORAGE_ATTACHMENTS_BUCKET="ui-syncup-attachments"
|
|
40
|
-
STORAGE_ATTACHMENTS_PUBLIC_URL="{{STORAGE_ENDPOINT}}/ui-syncup-attachments"
|
|
41
|
-
STORAGE_MEDIA_BUCKET="ui-syncup-media"
|
|
42
|
-
STORAGE_MEDIA_PUBLIC_URL="{{STORAGE_ENDPOINT}}/ui-syncup-media"
|
|
43
|
-
|
|
44
|
-
# ============================================================================
|
|
45
|
-
# Optional Configuration
|
|
46
|
-
# ============================================================================
|
|
47
|
-
|
|
48
|
-
# Supabase (if using Supabase Cloud)
|
|
49
|
-
# NEXT_PUBLIC_SUPABASE_URL="{{SUPABASE_URL}}"
|
|
50
|
-
# NEXT_PUBLIC_SUPABASE_ANON_KEY="{{SUPABASE_ANON_KEY}}"
|
|
51
|
-
# SUPABASE_SERVICE_ROLE_KEY="{{SUPABASE_SERVICE_ROLE_KEY}}"
|
|
52
|
-
|
|
53
|
-
# Email (Resend - Cloud deployments)
|
|
54
|
-
# Required in production unless SMTP is configured below.
|
|
55
|
-
# RESEND_API_KEY="{{RESEND_API_KEY}}"
|
|
56
|
-
# RESEND_FROM_EMAIL="{{RESEND_FROM_EMAIL}}"
|
|
57
|
-
|
|
58
|
-
# Email (SMTP - Self-hosted deployments, alternative to Resend)
|
|
59
|
-
# When SMTP_HOST is set, all fields below are required.
|
|
60
|
-
# SMTP_HOST="{{SMTP_HOST}}"
|
|
61
|
-
# SMTP_PORT="587"
|
|
62
|
-
# SMTP_USER="{{SMTP_USER}}"
|
|
63
|
-
# SMTP_PASSWORD="{{SMTP_PASSWORD}}"
|
|
64
|
-
# SMTP_FROM_EMAIL="{{SMTP_FROM_EMAIL}}"
|
|
65
|
-
# SMTP_SECURE="false"
|
|
66
|
-
|
|
67
|
-
# Google OAuth
|
|
68
|
-
# GOOGLE_CLIENT_ID=""
|
|
69
|
-
# GOOGLE_CLIENT_SECRET=""
|
|
70
|
-
# GOOGLE_REDIRECT_URI="{{APP_URL}}/api/auth/callback/google"
|
|
71
|
-
|
|
72
|
-
# Microsoft OAuth
|
|
73
|
-
# MICROSOFT_CLIENT_ID=""
|
|
74
|
-
# MICROSOFT_CLIENT_SECRET=""
|
|
75
|
-
# MICROSOFT_TENANT_ID="common"
|
|
76
|
-
|
|
77
|
-
# Atlassian OAuth
|
|
78
|
-
# ATLASSIAN_CLIENT_ID=""
|
|
79
|
-
# ATLASSIAN_CLIENT_SECRET=""
|
|
80
|
-
|
|
81
|
-
# Feature Flags
|
|
82
|
-
# NEXT_PUBLIC_ENABLE_ANALYTICS="true"
|
|
83
|
-
# NEXT_PUBLIC_ENABLE_DEBUG="false"
|
|
84
|
-
# NEXT_PUBLIC_ENABLE_HARD_DELETE="false"
|