Awaywell: time off requests, approvals and balances for a small company

Awaywell: time off requests, approvals and balances for a small company

00 Markdown

Request time off, approve it with a comment, track balances by type, and see who is out on a live team calendar with .ics feeds.

Agent specs

Agent
Claude Code, Opus 5.5 Medium
Time
14 min
Cost
$5.08*

Agents work faster and more accurately on Elements.

* Cost at API rates, September 2026.

Run it yourself

Paste this prompt into your AI agent. You get the finished app on your own machine, ready to change however you like.

Agent Chat
Install elements:
curl -fsSL 'https://install.elements.dev?os=darwin' | sh && export PATH=~/elements/bin:$PATH

Create an Elements app from the elementscode/demo-awaywell scaffold:
cd ~/elements/projects
elements create awaywell -scaffold=elementscode/demo-awaywell
cd awaywell

Start the app.

Need an AI agent?

In AI desktop apps, paste into the Code tab, not the general chat.

How it's built

Awaywell needed two kinds of accounts, emails on both sides of a request, a calendar feed per person, and a live team calendar. Each of those is a part of Elements, so the agent spent its 14 minutes on the time off rules themselves.

What Elements gave the app

  • A live team calendar. Every request, cancellation and decision notifies a channel. A manager's calendar and approvals page, and an employee's own page, each listen for their team or person and re-read, so a new request or approval shows up on an open calendar right away.
  • Requests and approvals as function calls. Requesting, cancelling, approving and denying are @rpc functions called from the page. The server counts working days, checks the balance and overlapping dates, and returns messages such as "those dates are all weekend" to the form.
  • Emails from a job. A background job emails the manager when a request comes in and the employee when it is decided, using two email templates. It is scheduled in the same transaction as the request, so mail follows committed changes.
  • A calendar feed per person. One route serves each person's approved time off as an .ics feed at a private url, and a manager's feed includes their team, so it subscribes in any calendar app.
  • Sessions and roles. Employees and managers each land on their own pages, and manager-only server calls share one guard.
  • Data from SQL files. Migrations define the schema, a working-days function used by both the app and the seed, and two managers with ten reports, balances and about forty requests in every status. The project server applied each one as soon as it was saved.

What the project server gave the agent

The project server runs alongside the agent and answers as soon as a file is saved: it type-checks the templates, TypeScript and SQL, applies migrations and reruns the tests, so every question came back right away and the agent kept building.

What shipped

The app type-checks with zero errors and all 24 tests pass. Every page works on desktop and phone, and live updates arrive across sessions, such as an approval turning a request solid on a manager's open calendar.

The code

Build it from scratch

To watch your agent build this app from an empty project, use the prompt we used instead. It takes longer than starting from the finished app above.

Agent Chat
Install elements:
curl -fsSL 'https://install.elements.dev?os=darwin' | sh && export PATH=~/elements/bin:$PATH

Create an Elements app:
cd ~/elements/projects
elements create awaywell
cd awaywell

Start the app, then build this:

Build a time off app named awaywell for a company of about twenty people.

Two kinds of accounts: employee and manager. Each employee has one manager.

EMPLOYEE
- Request time off: type (vacation, sick, personal), dates, a note.
- See their balance per type, and their requests with status.
- Cancel a pending request.

MANAGER
- Approve or deny their reports' requests with a comment.
- Team calendar: a month view of who is out, colored by type.

Everyone gets an email when a request is approved or denied, and managers get
one when a request comes in. Each person has a private calendar feed url
(.ics) of approved time off to subscribe to in their calendar app.

Seed two managers, ten employees, balances, and requests across this month and
next in every status. Show the seeded logins on the sign-in page.

New requests and approvals update the calendar in real time.

The weekly digest

New lessons, demos and posts from elements.dev, in one email a week.

Comments· 0