The KDOV Scheduler coordinates pattern operations between visiting units and Dover AFB Tower. Pilots submit pattern requests through a public mirror form. You (the supervisor) review, approve, or reject those requests through this internal scheduler.
Both apps share a backend database, so requests appear in real-time. There are no automated pilot emails — every official pilot notification (approve / reject / cancel) is sent by a supervisor from their AF Outlook account using the Copy HTML button (see the Pending tab section for details).
Eight 2-hour blocks per day, labeled A-H. Each block covers a UTC time range plus the local equivalent. Default capacity is 3 aircraft per block.
Pending awaiting your review
Confirmed approved booking
Rejected not approved
Every booking card has a 📧 Email button that opens your default email app pre-filled with all booking details. Useful for follow-up.
Click the Voice button to add bookings by speaking. Say callsign, aircraft, flight rules, date, and time block.
The Schedule tab shows all bookings for a single date, organized into 8 time blocks. Blocks display in Zulu (UTC) time with local time below.
Navigating dates
- Use ‹ Prev and Next › buttons to step day by day
- Click the date label in the center to open a date picker for jumping to any date
- The page remembers the last date you viewed
Block status colors
- Open — block has space available
- Full — block at capacity (red border)
Adding a booking manually
Click + Add on any block to create a booking directly. Fill in callsign, aircraft, unit, flight rules, and contact info. New bookings created here are auto-confirmed.
Each booking displays in a row with these columns:
- Status badge — Confirmed, Pending, or Rejected
- Callsign — primary identifier (largest, bolder)
- Aircraft — type (e.g., C-17, C-130)
- Unit — visiting organization
- Flight rules — VFR / IFR / TAAD / NVD
- Actions — Approve/Reject (if pending), Email button
- Reference number — KDOV-XXXX-XXXX format
- Submitted timestamp — when the request came in (Zulu)
This tab shows ALL pending requests across all dates, sorted with most urgent first. The amber badge in the tab bar shows how many are waiting.
Approving a request
Click ✓ Approve. The request immediately becomes confirmed and the booking moves to the Schedule tab. The pilot is notified by email — see "How emails actually reach the pilot" below.
Rejecting a request
Click ✕ Reject. A modal appears asking for a reason. Be specific — the pilot will receive your reason in the rejection email.
- Good: "Block at capacity. Try 0800-1000 instead."
- Bad: "Denied."
How emails reach the pilot
All pilot-facing emails are supervisor-initiated. The system does not send automated emails to pilots — this is intentional, so every official notification comes from a tower address with no NON-DOD SOURCE warnings.
Send the official notification (every status change)
- After approving, rejecting, or cancelling on the booking card, click the Copy HTML button.
- A fully formatted email is copied to your clipboard (banner, status pill, full details, your reason or notes if any).
- Open a new email in your AF Outlook. The pilot's POC email is shown on the booking card.
- Paste, verify the recipient, and send from your .mil account.
- The pilot receives a branded message with no NON-DOD warning, no delivery uncertainty.
Email button on every card
You can click 📧 Email to compose a manual reply at any time — useful for clarifying questions before approving. The Copy HTML button generates a branded status email; the Email button just opens a blank compose window pre-addressed to the pilot.
The amber Cert Watch banner sits above the schedule on the Schedule tab. Use it to flag when a controller is being evaluated for certification on the displayed date.
Why use it
- Other supervisors see at a glance "today is a watch day"
- Helps with shift handoffs (incoming supervisor knows context)
- Reminds you to keep traffic flowing for the trainee's evaluation
Adding a watch
Removing a watch
Click the ✕ on a chip to remove it. Confirmation is required before deletion.
Per-date storage
Cert watches are tied to a specific date. Switch dates with Prev/Next and you'll see only that date's watches. The banner is empty (dashed border) when no watches exist for that date.
Cert watches are internal only — they do NOT appear on the public mirror form. Pilots submitting requests do not know about them.
The Stats tab provides analytics across all bookings. Useful for briefings to leadership, justifying tool value, or understanding traffic patterns.
What you'll see
- Lifetime / YTD / This month — total confirmed bookings, three time horizons
- Confirmed / Pending / Rejected / Cancelled — request status breakdown with percentages
- Average response time — how fast you typically approve or reject after submission
- Bookings per month — 12-month trend chart
- Busiest time blocks — which 2-hour windows see the most traffic
- Top visiting units — top 8 organizations
- Top aircraft types — top 8 aircraft
- Cert watches per month — evaluation activity over time
Refresh button
Stats cache the most recent load. Click ↻ Refresh to pull updated numbers from the database.
Print button
Click 🖨 Print to open a clean black-on-white version optimized for paper or PDF printing. Use this for briefing handouts.
Export CSV button
Click ⬇ Export CSV to download a structured CSV file with all the data. The filename includes today's date. Open in Excel or Google Sheets for further analysis.
The Unit Roster tab is a reference list of visiting units, their callsigns, home bases, and aircraft types. Use it to look up unfamiliar callsigns or verify unit information.
Search
The search box at the top filters by callsign, unit name, or aircraft type. Type any partial match.
Multi-callsign units
Some units operate under multiple callsigns (e.g., LIFTR/MOOSE/BASCO/VOLT). These display together in the callsign column, wrapped to fit.
Layout
The roster uses a grid layout: callsign | unit code | location | aircraft type. All columns are centered for visual consistency.
The History tab is the system's record of everything that has happened. It has two sub-views: Pilots Directory and Audit Log. Switch between them with the toggle at the top of the tab.
A deduplicated list of every unit that has ever submitted a pattern request. One row per callsign, aggregating data across all of their submissions.
What you see for each entry
- Callsign — primary identifier.
- Unit — the unit designation (e.g., 437 AW).
- Aircraft — most recent aircraft type they flew.
- Phone — most recent POC phone number (click to dial on iPad/phone).
- Email — most recent POC email (click to open a new message in Outlook).
- Total / Confirmed / Rejected / Cancelled — lifetime request counts.
- Last submission — date of the most recent request.
Why this is useful
When a new pattern request arrives and you've never worked with the unit before, the directory gives you instant context: have they flown here before? How many times? When? With what aircraft? This also functions as an operational contact database — if you need to reach a unit after the fact (post-flight feedback, schedule change, follow-up question), the phone and email links are one tap away.
Search
The search box filters by any field: callsign, unit, aircraft type. Type any partial match.
A reverse-chronological timeline of every state-changing action across the entire system. Each entry shows the timestamp, the event type, the actor (pilot or supervisor), the request reference (if applicable), and contact info for follow-up.
Events captured
- submitted — pilot submitted a request via the mirror form.
- approved — supervisor approved a pending request.
- rejected — supervisor rejected a request (reason captured).
- cancelled — pilot self-cancel or supervisor-cancel (reason captured if supervisor).
- capacity_changed — supervisor changed the max capacity setting.
- password_changed — supervisor changed the scheduler password (the value itself is NEVER logged).
- cert_watch_added / cert_watch_removed — supervisor added or removed a controller evaluation flag.
Contact info inline
For request-related events, the entry shows a clickable email (✉) and phone (☎) link for the pilot's contact info. This lets you reach out directly from the audit log without having to look up the request separately.
Filters
You can filter the audit log by event type, callsign, or unit. Useful when researching a specific incident or building a quarterly report.
Why this exists
Accountability and traceability. When a question comes up later ("Did we approve that flight last Tuesday?" "Who rejected that one?" "When did the capacity change?"), the answer is one search away. The audit log also supports historical reporting and demonstrates operational value to leadership.
The Settings tab has a small number of operational controls.
Capacity per block
Default is 3 aircraft per 2-hour block. Adjust if your operational situation changes (e.g., reduced staffing, special operations). Changes apply immediately to all dates.
Light / Dark mode
Toggle between dark mode (default, optimized for night ops) and light mode (gray background, optimized for day shifts in bright tower cabs). The theme button (top right) is amber when light mode is active.
tower.kdov-scheduler.workers.dev. These are pre-approved on Air Force networks. Same code, same data, different URL.