Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
OWNIT: running the app and API locally
This repo has two apps that run together: apps/web (Next.js frontend) and apps/api (FastAPI backend, PostgreSQL). This document is the short version of how to get both up on one machine. See roadmap-reconciliation.md for where this fits in the overall plan (this is Stage 7: real accounts and a backend).
• Python 3.12
• Node 18 or newer
• PostgreSQL 16 with the PostGIS, pg_trgm, and uuid-ossp extensions available (the migration creates them; the server just needs the packages installed)README 전문 보기 ↗This repo has two apps that run together: apps/web (Next.js frontend) and apps/api (FastAPI backend, PostgreSQL). This document is the short version of how to get both up on one machine. See roadmap-reconciliation.md for where this fits in the overall plan (this is Stage 7: real accounts and a backend).
Create a role and database for local development, matching apps/api/.env.example:
sudo -u postgres psql -c "CREATE ROLE ileapp WITH LOGIN PASSWORD 'ileapp_dev_local';"
sudo -u postgres psql -c "CREATE DATABASE ile_dev OWNER ileapp;"
If PostGIS is not already installed on the Postgres server, install the matching version's package (for example postgresql-16-postgis-3 on Debian or Ubuntu) before running the migration below. The migration creates the extensions themselves; it just needs the packages present on the server first.
cd apps/api
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# .env works as is for local development. Change JWT_SECRET_KEY before
# anything but a throwaway local database ever touches this config.
alembic upgrade head
python -m app.seed
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
Confirm it is up with curl http://127.0.0.1:8000/health, which should return {"status": "ok"}.
Running alembic check after alembic upgrade head should report no drift between the models and the applied migration. If you change any file under app/modules/*/models.py, generate a new migration with alembic revision --autogenerate -m "...", read the generated file before applying it (autogenerate is a starting point, not a guarantee), and then alembic upgrade head again.
python -m app.seed is idempotent: safe to run again after a fresh migration, or after wiping the database, without creating duplicate rows.
cd apps/web
npm install
# .env.local already points at the local API:
# NEXT_PUBLIC_API_URL=http://localhost:8000
npm run dev
Visit http://localhost:3000. Registering an account, signing in, reloading the page, and signing out should all work end to end against the local API, backed by real Postgres rows rather than any simulated or in-memory state.
Accounts are real: registration, login, session restore on reload, and sign out all go through apps/api's auth module (argon2id password hashing, JWT access tokens, rotating refresh tokens in an httpOnly cookie). /dashboard, /messages, and /notifications correctly show a signed in state once you have an account, but the actual dashboard, messaging, and notification features behind that gate are not built yet. That is intentional, not a bug: those pages are honest about being real Stage 7 (accounts) sitting in front of not yet built Stage 8 (listings, messaging, inspections) features, rather than faking either one.
Everything under apps/api/app/modules/{properties,media,verification,messaging,inspections,reports,payments,notifications,admin} has real ORM models and a real migration, but no router yet. That is Stage 8 and Stage 10 work, built on top of the accounts and backend this document covers.
A 401 from /auth/refresh immediately after loading the app with no prior sign in is expected: the frontend always attempts a silent session restore on mount, and there is nothing to restore yet.
A 429 from /auth/login means the per-account or per-IP rate limiter tripped (5 attempts per 5 minutes per account, 20 per IP): wait for the window to pass, or restart the API process, since the limiter's state is in memory and does not survive a restart. This is a deliberate placeholder for the Redis backed limiter the architecture doc specifies for real infrastructure; see the comment in app/common/rate_limit.py.
If the browser console shows a CORS error on a request that used to work, check the API's own log first: an unhandled exception on the backend also shows up in the browser as a CORS failure, because the response never passes back through the CORS middleware. The real error is in the API process's log, not in anything the browser can tell you.