Codync
A free, open-source 1:1 alternative to Grok Bot and Muse. Message Claude Code, Codex, Cursor and 40+ coding agents as persistent bots from your iPhone, Mac or Linux desktop. Group chats, threads, appr
Track release steps and status
Translation pending
Developer toolsGitHub @GOURAVSINGH19OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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).