Skip to main content
This guide adds Nelkap to an Astro app. By the end, your app will run a workflow that creates a new user’s profile, waits a day, and sends them a welcome email, and you’ll follow each step in your project. Nelkap calls your app on every run, so the route it calls must be rendered on demand. You need an adapter that runs on Node.js, like @astrojs/node or @astrojs/vercel. You also need a Nelkap project with its endpoint, an API key, and its secret. If you don’t have them yet, follow the first three steps of the quickstart.
1

Install the SDK

2

Add your keys

Add your project’s API key and secret to .env:
.env
The API key lets your app start runs and save steps. The secret lets your app check that each call really comes from Nelkap. When you deploy, set the same two variables in your host’s settings.
3

Create your client and your first workflow

Create src/lib/nelkap.ts:
src/lib/nelkap.ts
  • getSecret reads your keys from the server’s environment, or from .env while you develop. They never reach the browser.
  • onboardUser is your workflow: an async function that takes the run’s payload, here a user ID.
  • Each step.run saves what its function returns. When the run picks up after the sleep, the profile step gives back its saved result instead of creating the profile again.
  • step.sleep pauses the run for a day. Nothing runs in your app during that day.
  • registerWorkflows tells Nelkap which workflows your app runs, as soon as the file is loaded.
Replace createProfile and sendWelcomeEmail with your own functions.
4

Add the route Nelkap calls

Create an endpoint at the path of your endpoint, and export a POST handler that passes each request to nelkap.handle:
src/pages/api/nelkap.ts
prerender = false renders the endpoint on each request instead of once at build time. handle checks the secret, answers Nelkap at once, and runs the workflow in the background. If your app checks sign-in on every route, for example in a middleware, leave /api/nelkap out: handle checks Nelkap’s secret instead.
5

Deploy and set your endpoint

Deploy your app, so Nelkap can reach the route over the internet. Then edit your project and set its endpoint to the route’s URL, like https://your-app.com/api/nelkap.
6

Start a run

Start the workflow from any server code. Here, a sign-up endpoint starts it once the user is created:
src/pages/api/sign-up.ts
run returns as soon as Nelkap has the run, so the sign-up doesn’t wait for the workflow. Its second argument, user.id, is the run’s payload: Nelkap passes it to onboardUser.
7

Follow your run

Open your project’s runs. The new run shows the profile step with what it returned, then sleeps. A day later, Nelkap calls your route again, the welcome email goes out, and the run completes.

Deploy on Vercel

On Vercel, your function can stop as soon as the response is sent. Pass waitUntil from @vercel/functions to keep the run going after handle answers:
src/pages/api/nelkap.ts
The run then goes on for as long as your function may run. If a call reaches that limit, every step already saved is kept, and Nelkap calls your app again about five minutes later to go on from there.