Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A single-page app to track the steps of a software release. Built with Next.js (TypeScript), GraphQL (graphql-yoga), Prisma and PostgreSQL.
A Release has a name, a due date, optional additional info, and 7 fixed steps that can be checked or unchecked. Its status is computed, never stored:
| Completed steps | Status |
|---|---|
| none | planned |
| at least one | ongoing |
| all 7 | done |
graphql-yoga in a Next route handlerdocker compose up --build
Open http://localhost:3000. Migrations are applied automatically on container start.
npm install.env.local with a Postgres connection string (a hosted one such as Neon works):
DATABASE_URL=postgresql://user:password@host:5432/dbname
.env, not .env.local, so pass the variable directly:
DATABASE_URL="postgresql://..." npx prisma migrate deploy
(PowerShell: $env:DATABASE_URL="postgresql://..."; npx prisma migrate deploy)npm run dev and open http://localhost:3000If your database already has the Release table (for example created with prisma db push), mark the migration as applied instead:
npx prisma migrate resolve --applied 20261025000000_init
npm test
tests/status.test.ts: the status rule.tests/resolvers.test.ts: the GraphQL API end to end through the HTTP handler (create, toggle steps, update info, delete, validation), with the database mocked.One endpoint: POST /api/graphql (GraphQL). GET /api/graphql serves the GraphiQL explorer in a browser.
| Operation | Description |
|---|---|
releases(limit: Int = 20, offset: Int = 0) | A page of releases ordered by due date (then id). Returns { items, total, hasMore }. limit is capped at 100. |
release(id: ID!) | One release, or null |
| Operation | Description |
|---|---|
createRelease(name: String!, dueDate: String!, additionalInfo: String) | Create a release. dueDate is an ISO 8601 datetime. Name must be non-blank. |
updateRelease(id: ID!, name: String, dueDate: String, additionalInfo: String) | Edit name, due date and/or info. Omitted fields are unchanged; additionalInfo: null clears it. |
toggleStep(releaseId: ID!, stepId: Int!, completed: Boolean!) | Set a step on or off (idempotent). stepId is 1 to 7. |
updateAdditionalInfo(releaseId: ID!, additionalInfo: String) | Replace the additional info (null or empty clears it). |
deleteRelease(id: ID!) | Delete a release. Returns true. |
enum Status { planned ongoing done }
type Step { id: Int! label: String! completed: Boolean! }
type ReleasePage { items: [Release!]! total: Int! hasMore: Boolean! }
type Release {
id: ID! name: String! dueDate: String! additionalInfo: String
status: Status!
steps: [Step!]!
}
Errors use GraphQL error codes BAD_USER_INPUT (invalid input) and NOT_FOUND (unknown release).
curl -X POST http://localhost:3000/api/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{ releases(limit: 20) { items { id name status } total hasMore } }"}'
curl -X POST http://localhost:3000/api/graphql \
-H "Content-Type: application/json" \
-d '{"query":"mutation { createRelease(name: \"v1.0\", dueDate: \"2026-12-01T10:00:00Z\") { id status } }"}'
PostgreSQL, one table. See prisma/schema.prisma and prisma/migrations/.
Release
| Column | Type | Notes |
|---|---|---|
id | TEXT | Primary key, UUID generated by Prisma |
name | TEXT | Not null |
dueDate | TIMESTAMP(3) | Not null; indexed (Release_dueDate_idx) |
additionalInfo | TEXT | Nullable |
completedSteps | INTEGER[] | Ids of steps that are on; default empty |
createdAt | TIMESTAMP(3) | Default now |
updatedAt | TIMESTAMP(3) | Updated automatically |
Design notes:
src/lib/steps.ts), not in a table. Each release only stores which step ids are done.status is derived from completedSteps (src/lib/status.ts) so there is a single source of truth.src/app/page.tsx single page
src/app/api/graphql/route.ts GraphQL endpoint
src/graphql/ schema + resolvers + yoga instance
src/components/ UI components (Apollo Client)
src/lib/ steps, status rule, prisma client, GraphQL operations
prisma/ schema + migrations
tests/ Vitest tests
next build fails with useContext of null, check that NODE_ENV is not set to development in your shell (NODE_ENV=production npm run build).To be added after deployment: live URL, load-test results (baseline vs optimized).