Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
인증, 프로젝트, 고객 작업 공간, 메시지, 청구, 안전한 파일을 다루는 MSPixelPulse 백엔드 API입니다
Official MSPixelPulse backend API for authentication, projects, client workspaces, messaging, billing, and secure file workflows.
개발 도구JavaScriptGitHub @Oyemahak최근 접속 확인 실패운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Official MSPixelPulse backend API for authentication, users, agency projects, client workspaces, messaging, billing, portfolio content, and secure file workflows.
src/app.js - Express app, middleware, health endpoints, API mountingsrc/server.js - local HTTP boot process and optional legacy Mongo compatibility connectionapi/index.js - Vercel serverless Express entrypointsrc/config/ - environment, CORS, providers, and optional Mongo compatibility helperssrc/features/ - feature controllers and routessrc/models/ - Mongoose schemassrc/google/ - OAuth, Sheets, Drive, and bounded retry utilitiessrc/repositories/ - provider-neutral domain repositoriessrc/storage/ - Google Drive storage provider and storage interfacesrc/middleware/ - auth, roles, error handlingsrc/lib/ - storage, file-policy, authorization, and health helperssrc/scripts/ - seed and maintenance scriptsnpm install
cp .env.example .env
npm run dev
Local API default:
http://localhost:4000
Use .env.example as the source of truth. Never commit .env.
Required for normal operation:
NODE_ENV=development
PORT=4000
JWT_SECRET=replace-with-long-random-secret
JWT_EXPIRES_IN=7d
CORS_ORIGIN=http://localhost:5173,https://mspixelpulse.com,https://www.mspixelpulse.com
COOKIE_SECURE=false
Required production provider configuration:
DATA_PROVIDER=google
STORAGE_PROVIDER=google-drive
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REFRESH_TOKEN=
GOOGLE_DATABASE_SPREADSHEET_ID=
GOOGLE_DRIVE_ROOT_FOLDER_ID=
GOOGLE_DRIVE_CLIENT_FILES_FOLDER_ID=
GOOGLE_DRIVE_PROJECT_FILES_FOLDER_ID=
See docs/google-vercel-migration-2026-08-15.md
for the verified Google migration record and recovery notes.
Required for contact and blog notification email:
RESEND_API_KEY=
RESEND_FROM_EMAIL="MSPixelPulse <[email protected]>"
PUBLIC_SITE_URL=https://mspixelpulse.com
ANONYMOUS_ID_SALT=replace-with-long-random-secret
[email protected],[email protected]
The backend sends through Resend over HTTPS, avoiding outbound SMTP connection delays and app-password handling. The sending domain must be verified with the provider.
[email protected] remains the public business and sender-facing address. Internal contact and blog notifications are delivered to both [email protected] and [email protected]; recipient lists are de-duplicated. Use the per-event flags in .env.example to pause a notification category without disabling the underlying database action.
Production super-admin seed:
[email protected]
SUPER_ADMIN_PASSWORD=replace-with-secure-secret
SUPER_ADMIN_NAME=Mahak Patel
Debug routes are disabled by default:
ENABLE_DEBUG_ROUTES=false
DEBUG_ROUTE_KEY=
Optional private console intake (off by default):
CONSOLE_INTAKE_URL=
CONSOLE_INTAKE_SECRET=
When both are set, every genuine new contact lead (not honeypot, duplicate or invalid submissions) is also sent to the private MSPixelPulse console as a signed POST (X-MSP-Timestamp and X-MSP-Signature: v1=<hex HMAC-SHA256(secret, timestamp + "." + body)>). The feature stays off, and nothing is sent, until both variables are set, the URL uses https and the secret is at least 32 characters. The console must hold the same value as INTAKE_WEBHOOK_SECRET. Only the contact fields are forwarded (lead id, name, email, phone, business name, service, inquiry type, message, source page URL, created time); the IP address and user agent are never sent. The call is bounded by a 4 second timeout, is not retried, never changes the visitor's response and logs only a short failure code. Implementation: src/lib/consoleIntake.js.
Production must use DATA_PROVIDER=google and STORAGE_PROVIDER=google-drive.
Google Sheets records use stable IDs, never row numbers. Google Drive files are
private and referenced by Drive file IDs plus logical metadata in the Files
sheet. OAuth failures surface as controlled storage/configuration errors rather
than switching to another provider.
POST /api/auth/login.trim().toLowerCase().passwordHash from the Users Sheet.Demo-safe accounts should be created with environment-provided passwords only. Do not publish production or demo passwords in docs, frontend code, backend code, logs, or seed output.
GET /healthGET /api/healthPOST /api/auth/registerPOST /api/auth/loginPOST /api/auth/logoutGET /api/auth/meGET /api/admin/usersGET /api/projectsPOST /api/files/uploadPUT /api/projects/:projectId/requirementsPOST /api/users/me/avatarPOST /api/contactGET /api/blog-engagement/:slugPUT|DELETE /api/blog-engagement/:slug/reactionPOST /api/blog-engagement/:slug/commentsPOST /api/blog-engagement/:slug/sharesPOST /api/blog-engagement/subscriptionsGET /api/blog-engagement/subscriptions/confirmGET /api/blog-engagement/subscriptions/unsubscribeGET /api/admin/blog-engagement/* (admin only)Health endpoints are public and safe:
curl https://api.mspixelpulse.com/health
curl https://api.mspixelpulse.com/api/health
They report process status, environment, uptime, the selected providers, and Google Drive configuration without exposing hosts, keys, passwords, or tokens.
Protected production super admin:
SUPER_ADMIN_EMAIL='[email protected]' SUPER_ADMIN_PASSWORD='set-secure-value' SUPER_ADMIN_NAME='Mahak Patel' npm run seed:super-admin
Portal demo users and sample invoice:
PORTAL_DEMO_CLIENT_PASSWORD='set-secure-value' PORTAL_DEMO_DEVELOPER_PASSWORD='set-secure-value' npm run seed:portal-demo
npm run seed:demo-invoice
Legacy local demo users require explicit password environment variables:
SEED_DEMO_ADMIN_PASSWORD='set-secure-value' SEED_DEMO_CLIENT_PASSWORD='set-secure-value' SEED_DEMO_DEVELOPER_PASSWORD='set-secure-value' \
npm run seed:demo
Seed commands are idempotent and do not log passwords. Use demo seeds for local/dev or controlled production preview data only.
Production Vercel variables include:
NODE_ENV=production
JWT_SECRET
JWT_EXPIRES_IN=7d
CORS_ORIGIN=https://mspixelpulse.com,https://www.mspixelpulse.com
COOKIE_SECURE=true
DATA_PROVIDER=google
STORAGE_PROVIDER=google-drive
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
GOOGLE_REFRESH_TOKEN
GOOGLE_DATABASE_SPREADSHEET_ID
GOOGLE_DRIVE_ROOT_FOLDER_ID
GOOGLE_DRIVE_CLIENT_FILES_FOLDER_ID
GOOGLE_DRIVE_PROJECT_FILES_FOLDER_ID
Do not overwrite real dashboard secrets with placeholder values.
/health.503: check the server-only Google OAuth and Drive environment variables.CORS_ORIGIN includes the exact frontend origin. The canonical public origin is https://mspixelpulse.com..env, cookies, keys, tokens, dumps, or backups.ENABLE_DEBUG_ROUTES=true and, in production, x-debug-key.