ai-startup-skills
AI 제품을 만드는 스타트업을 위한 7단계 에이전트 스킬: 검증 → 비즈플랜 → 정책 → 로드쇼 → 고객 확보 → 가격 책정 → 등록
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Static HTML/CSS/JavaScript workspace dashboard for Veyago Inc.
From this directory, serve the dist folder with any static file server. For example:
Then open http://localhost:4173.README 전문 보기 ↗Static HTML/CSS/JavaScript workspace dashboard for Veyago Inc.
From this directory, serve the dist folder with any static file server. For example:
python3 -m http.server 4173 --directory dist
Then open http://localhost:4173.
dist/index.html — application shell and metadatadist/styles.css — base Veyago / Apple-inspired visual systemdist/workspace.css — workspace-specific layouts and responsive stylingdist/calendar.js — CAL: today's date and the working week the agenda draws;
re-checks the clock and tells the views when the date changesdist/app.js — shell, icons, dialogs, and core interactionsdist/workspace.js — connected app views, detail routes, notes, tasks, and subpagesdist/data/ — the Supabase layer (see below).openai/hosting.json — Sites project identityBump the ?v=N query on the <script>/<link> tags in index.html whenever
you change CSS or JS, or browsers keep serving the old file.
node --test
No dependencies. tests/*.test.mjs load the browser scripts into a node:vm
sandbox, the way a <script> tag runs them, and drive them with a fake clock —
so "what does the agenda show on a Sunday, or the night a week rolls over" is
checked without waiting for one.
Every view reads Supabase. The arrays at the top of app.js start empty —
they used to hold sample rows, which meant a failed load looked like a working
workspace belonging to somebody else. dist/data/store.js fills them once
someone signs in.
Ticking a task, replying to a ticket, adding a note and the whole "Create new" dialog all write, and wait for the database before the screen changes.
dist/data/Backed by the same Supabase project as veyago.cloud/admin: one database, one
set of accounts, employees.role deciding what each person sees. The anon key
in config.js is public-safe — every workspace table is private, with no
anonymous policy at all, so the key alone opens nothing.
| File | What it is |
|---|---|
supabase.js | vendored supabase-js v2 (no CDN — the site's CSP is script-src 'self') |
config.js | project URL + anon key |
session.js | who is signed in, and their role |
gate.js / gate.css | the sign-in screen, TOTP step, header session chip |
queries.js | one read function per view |
actions.js | the writes |
writes.js | takes over the app's own handlers so they reach the database |
store.js | loads everything and swaps it into the arrays the views render from |
Script order matters — writes.js before app.js, store.js after it.
The reasons are in veyagocloud/docs/workspace-backend.md; both failure modes
are silent.
await workspaceSession.ready(); // never query before this resolves
if (!workspaceSession.isStaff()) return; // signed in, but not a team member
const tickets = await workspaceData.tickets();
const overview = await workspaceData.overview(); // the four KPI tiles, one call
await workspaceActions.replyToTicket(id, 'On it.', 'reply');
ready() is not optional. On a fresh load getSession() can hand back a
session before supabase-js has finished restoring it; a query fired in that
window runs with a stale JWT, RLS sees no user, and every private row comes back
empty — which reads as "there is no data" rather than "you asked too early".
Reads are filtered by Row Level Security, so a query returning [] for one
person and rows for another is the database working, not a bug. Finance is
managers only; overview().revenue_month is null rather than 0 for everyone
else, because a zero would read as a real number.
Available: overview, activity, events, tickets, ticket, projects,
projectTasks, contacts, companies, invoices, transactions, team,
mailThreads, mailMessages, integrations.
Schema, permissions, the test suites, and how to connect Gmail and Google
Calendar: veyagocloud/docs/workspace-backend.md.
Vercel, from this repo, at workspace.veyago.cloud. vercel.json sets
outputDirectory: dist, so there is no build step — the committed files ship
verbatim, the same arrangement veyago.cloud uses.
Everything is 'self' except images:
img-src 'self' data: https:
That is deliberate and it is the interesting one. The Mail view renders real
email, and email is full of remote images — a stricter img-src would make
the "Show images" button do nothing. Remote images are still blocked by
default in data/mail-html.js, because a remote image is how a sender learns
you opened their message; the CSP only permits them once you ask.
The properly private version proxies images through a function so the sender sees the server rather than you, the way Gmail does. Worth building; not built.
connect-src allows the Supabase REST, auth and realtime origins and nothing
else. script-src is 'self' alone — supabase-js and DOMPurify are vendored
into dist/data/ rather than pulled from a CDN.
X-Robots-Tag: noindex, nofollow, noarchive on every response, a matching
<meta name="robots">, and a robots.txt that disallows everything. The URL
is public and the sign-in gate is the boundary — but there is no reason for it
to be in a search index.
CSS and JS are max-age=3600, must-revalidate; the shell is no-cache. Short
enough that the stale-stylesheet class of bug (see veyagocloud's
tools/version-assets.js) cannot bite here, so the manual ?v=N on the script
tags stays a convenience rather than a load-bearing mechanism.