A small OpenAPI workspace built with Next.js and TypeScript.
The app lets you paste an OpenAPI schema, validate it, browse generated endpoints, prepare API requests, generate cURL commands, send requests through a server proxy, and view request history when signed in.
Live demo:
https://swagger-editor-app-eight.vercel.app/
- OpenAPI editor with JSON/YAML support
- Schema validation and formatted validation errors
- Swagger viewer with generated endpoints
- Request console with params, headers, body, cURL generation, copy action, and proxy execution
- Supabase auth with sign in, sign up, and sign out
- Saved schema for authenticated users
- Request history and basic analytics
- English and Russian UI
- Unit tests and coverage config
- Next.js 16
- React 19
- TypeScript
- Supabase
- next-intl
- Vitest
- Tailwind CSS
Use Node.js 24.x.
For local development with nvm, run:
nvm install
nvm useThe team uses:
node -v # v24.17.0
npm -v # 11.13.0The repository uses engine-strict=true, so npm will complain if the Node major version is different.
Copy the example file:
cp .env.example .env.localThen fill in your own Supabase values in .env.local.
Install dependencies from the lockfile:
npm ciUse npm ci for normal setup. Use npm install only when you intentionally change dependencies.
Start the dev server:
npm run devOpen:
http://localhost:3000
For a quick review, the editor opens with a small DummyJSON schema by default.
The same schema is also stored here:
examples/openapi/dummyjson-lite.yaml
Suggested flow:
- Open the app.
- Click Validate.
- Check that the viewer shows three endpoints:
GET /productsPOST /products/addGET /products/{id}
- Select
GET /products/{id}and fill theidpath parameter. - Click Generate cURL and copy the generated command.
- Select
POST /products/add, generate cURL, and check that it includesContent-Type: application/json. - If you are signed in, execute a request and check that it appears in History.
Migrations are stored in:
supabase/migrations
If your Supabase project is already linked, apply migrations with:
npx supabase migration up --linkedIf the project is not linked yet:
npx supabase login
npx supabase link --project-ref <project-ref>
npx supabase migration up --linkedRun the full local check before opening a PR:
npm run checkThis runs formatting check, ESLint, TypeScript, and tests.
Useful separate commands:
npm run format:check
npm run lint
npm run typecheck
npm run test
npm run test:coverageTests also run automatically before git push through Husky.
- Routes are not locale-prefixed. The language is selected in the UI and stored in a cookie.
- Auth pages live outside the main app shell.
- The main editor workspace state is kept while navigating between main routes during one client session.
- Request history and saved schemas require an authenticated Supabase user.
- In History, HTTP
4xx/5xxresponses are shown inStatus;Proxy erroris filled only when the proxy cannot get a response, for example timeout or network failure. - The proxy route runs on the server and blocks unsafe target URLs before making requests.
The app is ready for Vercel deployment.
Make sure the same environment variables are added in Vercel:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=The Node runtime is controlled by package.json and .nvmrc.