mesh-avatar-studio
일러스트를 코딩 에이전트와 로컬 편집기로 2D 메쉬 애니메이션 아바타로 변환
연구자를 위한 포스터 편집기, 인쇄용 크기와 도표 가독성 검사, 저자·소속·BibTeX 인용 지원
A poster editor built for researchers. Print-ready poster sizes, figure readability checks, authors and affiliations, BibTeX citations.
디자인TypeScript · JavaScriptGitHub @bobaba99온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Opinionated academic poster builder for students and researchers. Anonymous-first auth, autosave from the first keystroke, curated design constraints, and a seamless upgrade path to a permanent account without losing work.
| Layer | Choice |
|---|---|
| Frontend | Vite + React 18 + TypeScript (SPA) |
| Styling | Tailwind CSS + CSS variables |
| State | Zustand + React Query |
| Routing | React Router v6 |
| Backend | Supabase (Auth, Postgres, Storage, RLS) |
| API | Express + TypeScript (LLM proxy only) |
| LLM | Anthropic Claude (server-side, never in browser) |
| Export | Browser print (v1) |
postr/
├── apps/
│ ├── web/ # Vite + React SPA (main user-facing app)
│ └── api/ # Express TypeScript server (LLM proxy)
├── packages/
│ └── shared/ # Typed data model + generated DB types
├── supabase/ # Migrations, seed, edge functions, config
└── docs/ # Internal product + engineering docs
Architecturally, ~80% of traffic goes directly from browser to Supabase via RLS-protected queries. The Express API exists only to hold secrets (LLM API keys) the browser cannot safely hold.
supabase start, or a remote project)# 1. Install workspace dependencies
npm install
# 2. Configure environment variables
cp apps/api/.env.example apps/api/.env
# Create apps/web/.env with VITE_SUPABASE_URL, VITE_SUPABASE_PUBLISHABLE_KEY, VITE_API_BASE_URL
# 3. (Optional) Start the local Supabase stack
npm run db:start
# 4. Run the web app
npm run dev # http://localhost:5173
# 5. Run the API (separate terminal, only needed for import feature)
npm run dev:api # http://localhost:8787
apps/web/.env — browser bundle, must use VITE_ prefix:
VITE_SUPABASE_URL=
VITE_SUPABASE_PUBLISHABLE_KEY=
VITE_API_BASE_URL=http://localhost:8787
apps/api/.env — server-only, never exposed to the browser:
PORT=8787
CORS_ORIGINS=http://localhost:5173
SUPABASE_URL=
SUPABASE_SECRET_KEY=
ANTHROPIC_API_KEY=
Never commit .env files. See apps/api/.env.example for the canonical shape.
| Command | What it does |
|---|---|
npm run dev | Start the web app (Vite dev server) |
npm run dev:api | Start the Express API |
npm run build | Build all workspaces |
npm run test | Run all workspace tests |
npm run lint | Lint all workspaces |
npm run db:start | Start the local Supabase stack |
npm run db:stop | Stop the local Supabase stack |
npm run db:reset | Reset the local database |
npm run db:test | Reset the local database, then run the SQL tests |
npm run db:types | Regenerate packages/shared/src/database.types.ts |
Schema lives in supabase/migrations/. After editing migrations:
npm run db:reset # apply migrations against local Supabase
npm run db:types # regenerate typed client
Every user-owned table is protected by Row Level Security. See the migrations for the exact policies.
The SQL RPCs (export_my_data(), delete_own_account(), the rate-limit
triggers) are tested at the database level — PL/pgSQL bodies are only
syntax-checked at CREATE time, so a broken column reference inside a
function applies cleanly and fails only at runtime. The pgTAP suite in
supabase/tests/ catches that class of bug.
npm run db:test # supabase db reset && supabase test db
Requires Docker and a running local stack (npm run db:start, or just
supabase db start for Postgres alone). Each test file is a single
transaction that rolls back at the end, so the suite leaves the local
database untouched. The same suite runs in CI against a throwaway
Postgres container — local-stack default credentials only, no secrets.
CI skips the reset on purpose: a fresh supabase db start already applies
every migration, while the local script resets first because a long-lived
dev stack may be behind on migrations.
Pre-launch. The data model, editor, and auth flows are in place; polish and production hardening are in progress.
Proprietary — all rights reserved.