Engagements, talks, materials, and a public feed

Your speaking life, in order, and on your website.

Every invitation becomes an engagement. Every abstract, bio, and deck is versioned, and each engagement remembers the version it used. A public feed puts your talks on your own site.

Illustration: an empty lecture hall at night, rows of dark seats leading to a low stage where a wooden lectern with a slim microphone stands in one warm ember spotlight.
Features

Everything a speaker keeps track of, in one place.

Rostrum is a web app for a working speaker. It runs today and holds engagements, talks, materials, a public feed, and the Scout. The people and events on this site are fictional, and every screen is a capture of the running app. These are the things it does.

Every engagement, from invitation to delivered

A pipeline with rules

An engagement starts as a prospect and moves through submitted, accepted, and confirmed to delivered, with declined, rejected, and canceled as ways out. Each move is checked: confirmed needs a start time, delivered needs a start time that has passed, and an illegal move is refused.

Everything about the event
The event and its link, the organizer, one of ten formats (keynote, talk, workshop, panel, fireside, podcast, webinar, lecture, meetup, or other), the start and end in the event's own time zone, the venue or a private join link, the audience, the call-for-proposals deadline, the fee, whether travel is covered, the host, and private notes.
An engagement page for a confirmed keynote: a status stepper from Prospect through Delivered, the event, format, dates in the event's time zone, venue, audience, fee, host, and a public summary.An engagement page for a confirmed keynote: a status stepper from Prospect through Delivered, the event, format, dates in the event's time zone, venue, audience, fee, host, and a public summary.
One engagement, with its status stepper and every detail of the event.

A dashboard for what is due

Counts by status, the next confirmed engagements, the calls for proposals closing in the next 30 days, how many talks were delivered this year, and how many engagements the public feed carries.

Rostrum's dashboard for a fictional speaker: counts of engagements by status (two prospects, two submitted, one accepted, four confirmed, five delivered), the next four confirmed engagements, a call-for-proposals deadline closing in 14 days, and the public feed's published count.Rostrum's dashboard for a fictional speaker: counts of engagements by status (two prospects, two submitted, one accepted, four confirmed, five delivered), the next four confirmed engagements, a call-for-proposals deadline closing in 14 days, and the public feed's published count.
The dashboard: where the pipeline stands, what is coming up, and what is due.

Find any engagement

Filter by status, date range, talk, and whether it is public, or search the title, event, organizer, and city. Upcoming engagements come first, soonest at the top, then past ones, most recent first.

Rostrum's engagements list: upcoming engagements first, then past ones, each with its status, event, date, and place, above filters for status, dates, talk, and public.Rostrum's engagements list: upcoming engagements first, then past ones, each with its status, event, date, and place, above filters for status, dates, talk, and public.
Every engagement in one list, upcoming first and then past, with filters for status, dates, talk, and public, and a search over title, event, organizer, and city.
A history that stays put
Every status change is recorded with its time and an optional note, so you can see when a proposal went in and when the answer came back.
The Materials used card of an engagement, listing an abstract at version 3, slides at version 3, and a bio at version 2, each with Change and Unlink buttons, above the engagement's status history.The Materials used card of an engagement, listing an abstract at version 3, slides at version 3, and a bio at version 2, each with Change and Unlink buttons, above the engagement's status history.
The materials this engagement used, each pinned to a version and a role, and below them the history of every status change with its time and note.

Talks and materials that remember

Talks you give more than once

A talk keeps its title, subtitle, abstract in Markdown, a short abstract of up to 300 characters, key takeaways, tags, level, typical length, and status. Its page lists every engagement that gave it and every material attached to it. A talk with engagements cannot be deleted; it is retired instead.

A talk page with its abstract, key takeaways, tags, the engagements that gave it, and its attached materials.A talk page with its abstract, key takeaways, tags, the engagements that gave it, and its attached materials.
The abstract, takeaways, and tags, every engagement that gave the talk, newest first, and every material attached to it.

A library for every kind of material

Abstracts, bios, slides, scripts, speaker notes, outlines, handouts, video, audio, photos, links, and anything else. A material holds Markdown text, an uploaded file of up to 250 MB, or a link, and may belong to a talk or to none, as a bio usually does.

Rostrum's materials library: a table of abstracts, bios, slides, speaker notes, a handout, and recordings, with filters for kind and talk.Rostrum's materials library: a table of abstracts, bios, slides, speaker notes, a handout, and recordings, with filters for kind and talk.
The library of abstracts, bios, decks, notes, handouts, and recordings, filtered by kind, talk, or a text search.

Every change is a new version

Editing a material never overwrites it. Each change is a numbered, immutable version with a note, and an uploaded file keeps its name, type, size, and SHA-256 checksum. Earlier versions stay readable and downloadable.

A slides material with three numbered versions, each with a note, a filename, a size, and a checksum, and a download link for each.A slides material with three numbered versions, each with a note, a filename, a size, and a checksum, and a download link for each.
A deck with three numbered versions, each with its note, its file name, size, and checksum, and a download for every one.

The exact version each engagement used

An engagement links the materials it used, each pinned to one version and given a role: presented, handout, submitted, promo, or recording. Months later, the answer to what you actually presented is on the page, even after the deck changed.

Nothing in use can disappear
A material linked to any engagement cannot be deleted, and neither can a talk that has engagements. The app refuses with a clear message instead.
The Materials used card of an engagement, listing an abstract at version 3, slides at version 3, and a bio at version 2, each with Change and Unlink buttons, above the engagement's status history.The Materials used card of an engagement, listing an abstract at version 3, slides at version 3, and a bio at version 2, each with Change and Unlink buttons, above the engagement's status history.
The materials this engagement used, each pinned to a version and a role, and below them the history of every status change with its time and note.

A public feed that cannot leak

Five formats from one place

A structured speaking.json for your website, a JSON Feed, RSS, Atom, and an iCalendar file with one event per engagement. Entries have stable ids, update times that change only when a public field changes, and a five-minute cache, and any website may read them.

Preview what the world sees

The app shows a preview of speaking.json built by the same code that serves it, with each format's address ready to copy. Markdown in the feed is rendered to sanitized HTML, and raw HTML is stripped.

An allowlist, not a filter
Only engagements you mark public that are confirmed or delivered appear. The feed is built from an explicit list of fields, so a fee, currency, travel note, host contact, private note, join link, audience description, or call-for-proposals detail never leaves the app, and a test proves no private field leaks.
Private reads as missing
An unknown feed address or a private material answers 404, never 403, so the feed reveals nothing about what exists. Files are served through the feed only for materials you marked public.
Rostrum's Feed page: five feed URLs with copy buttons (speaking.json, JSON Feed, RSS, Atom, and a calendar), and a preview of speaking.json showing the speaker and the upcoming engagements.Rostrum's Feed page: five feed URLs with copy buttons (speaking.json, JSON Feed, RSS, Atom, and a calendar), and a preview of speaking.json showing the speaker and the upcoming engagements.
The feed's five formats, and a preview built by the same code that serves it.

An agent that finds where to speak, on a budget

Tell it what you want

Topics and keywords, your home city, the regions you will travel to, whether international and virtual events are wanted, formats, a minimum audience, paid-only, how far ahead to look, blackout dates, and free-form notes. A cadence (off, daily, or weekly) and the spend caps live beside them.

The Scout's settings tab: topics, keywords, home city, regions, formats, minimum audience, blackout dates, the cadence, and the per-run and monthly spend caps.The Scout's settings tab: topics, keywords, home city, regions, formats, minimum audience, blackout dates, the cadence, and the per-run and monthly spend caps.
What the Scout looks for, where you will travel, your blackout dates, the cadence, and the per-run and monthly spend caps.

Events it finds, kept tidy

The Scout tracks each event's dates, place, topics, audience, call-for-proposals window, and speaker benefits (travel, fee, ticket), de-duplicated by address or by name and date. A sighting updates the event; it never resets your decision to watch, dismiss, or pursue it.

The Scout's events tab: a table of conferences, meetups, and webinars with dates, places, call-for-proposals windows, speaker benefits, and statuses.The Scout's events tab: a table of conferences, meetups, and webinars with dates, places, call-for-proposals windows, speaker benefits, and statuses.
Every event the Scout has found, with its dates, place, call-for-proposals window, speaker benefits, and your decision: new, watching, dismissed, or pursued.

Recommendations with the homework done

Each recommendation carries a fit score from 0 to 100, a short rationale, the best existing talk (or up to three new topic ideas), the materials a submission would need with the ones you already have marked, the deadline, and the reasons it might not fit. Events that break a hard preference are scored but flagged.

The Scout's recommendations: a conference with a fit score of 88, why it fits, a concern, a suggested talk, a topic idea, three materials needed (one on hand), and Accept, Watch, and Dismiss buttons.The Scout's recommendations: a conference with a fit score of 88, why it fits, a concern, a suggested talk, a topic idea, three materials needed (one on hand), and Accept, Watch, and Dismiss buttons.
A Scout recommendation, with a fit score and the materials it would take.

Accept to start the engagement

Accepting a recommendation creates a prospect engagement from the event and a prep checklist from the materials needed, and can draft a talk from a topic idea. The Scout never submits anything for you.

A prospect engagement for a summit, with a status stepper at Prospect and a prep checklist from the Scout: an abstract and a deck missing, a bio and a headshot linked from the library.A prospect engagement for a summit, with a status stepper at Prospect and a prep checklist from the Scout: an abstract and a deck missing, a bio and a headshot linked from the library.
An engagement created by accepting a Scout recommendation, with a prep checklist built from the materials the submission needs.

A budget it cannot overspend

Before every model call the Scout checks the run's spend against a per-run cap (three dollars by default) and the month's spend against a monthly cap (fifteen dollars by default). At either cap it stops, keeps what it found, and says so. Every run records its searches, tokens, cost, and a log.

The Scout's runs tab: four finished runs with their status, focus, counts of events and recommendations, searches, tokens, and estimated cost, one of them budget stopped.The Scout's runs tab: four finished runs with their status, focus, counts of events and recommendations, searches, tokens, and estimated cost, one of them budget stopped.
Every run with its status, focus, counts, searches, tokens, estimated cost, and log.
Screens

See it in light and dark

Real captures of the running tool, with fictional StrataForge Robotics data. They follow your theme.

How it works

From invitation to a version you can point to

  1. Record

    An invitation arrives or a call for proposals opens. You record it as a prospect, or accept a Scout recommendation, with the event, the date, the host, and the talk you intend to give.

  2. Prepare

    A prep checklist shows what is ready and what is missing. You write or reuse the abstract, bio, and deck, and every change to them is a new version.

  3. Move it along

    The engagement goes from submitted to accepted to confirmed as the event replies, and each move is recorded. Link the materials it used, each at its exact version.

  4. Publish and deliver

    Once confirmed and public, it appears in the feed. After the talk, add the recording and mark it delivered.

Accessibility

Built so everyone can use Rostrum.

Rostrum's app is built on the Renkara design system. A scripted axe-core run covers nine of its views in light and dark at phone and desktop widths, and the same run walks the keyboard on two pages and checks for sideways scrolling. It found no serious or critical violation, and it found 40 smaller ones that we list below. Here is what the product supports today and what we have actually checked. We do not claim a WCAG conformance level for the product.

  • Partly supported

    Keyboard operation

    Every control is a native link, button, or form field, and a skip link comes first. In a scripted run, Tab walked 40 stops on the dashboard and 60 on an engagement page, and every stop showed a focus indicator except where focus left the page. Nobody has walked every flow with a keyboard alone.

  • Partly supported

    Screen reader landmarks and labels

    axe-core, which checks names, labels, roles, and landmark structure, found no serious or critical violation on nine views. It found two smaller kinds of problem, listed under known gaps. Rostrum has not been tested with a screen reader.

  • Supported

    Contrast in light and dark

    Text and controls are checked for contrast in both the light and dark themes, and the brand color is held to 4.5 to 1 on the card colors by a test.

  • Partly supported

    Reduced motion

    The stylesheet shortens animations and transitions to a moment when the visitor asks for reduced motion. The dashboard runs no animation with or without that setting, so the scripted run could not tell the two apart, and drawers and toasts were not exercised.

  • Not yet tested

    Text resize and zoom

    Resizing text to 200 percent has not been tested.

  • Partly supported

    Mobile and touch

    All nine views fit a 375 pixel and a 320 pixel wide screen with no sideways scrolling of the page. At 375 pixels nearly every control is at least 44 pixels tall, but the header's menu and theme buttons are 36 pixels wide, and the checklist checkboxes are 24 by 24 pixels inside a larger row.

Tech specs

Under the hood

Rostrum technical specification
Application
  • A web app with light, dark, and system themes, usable down to a 375-pixel phone
  • React 19 and TypeScript on the Renkara design system
  • Every list pages at 50 by default and 200 at most
Service
  • Python 3.12 with FastAPI and Pydantic; every request body rejects fields it does not know
  • PostgreSQL through async SQLAlchemy with Alembic migrations
  • Files go to a private object store (encrypted S3 in production), never the database; uploads up to 250 MB
Public feed
  • speaking.json, JSON Feed 1.1, RSS 2.0, Atom 1.0, and iCalendar, all unauthenticated and read-only
  • Allowlist serializer, stable entry ids, ETags, and a five-minute cache
  • Downloads send nosniff, and only PDF, PNG, JPEG, GIF, WebP, MP4, and MP3 display inline; everything else is an attachment
Scout
  • Imports two free public conference datasets, then searches the web with Claude, then writes recommendations
  • Per-run and monthly spend caps; at most one run at a time; a run can be canceled
  • Web pages and datasets are treated as data, never as instructions; everything the agent returns is validated before it is stored
Access
  • Sign-in through the Renkara identity service; every row belongs to one account, and another account's id reads as missing
  • A health endpoint, an authenticated diagnostics endpoint, Prometheus metrics, and structured logs
Tests
  • 611 backend tests at 98.8% line coverage and 250 frontend tests at 98.6% (November 3, 2026)
  • 52 browser tests on desktop and mobile in light and dark with axe-core, plus a seeded test that accepts a recommendation
  • The feed has a test that proves no private field leaks, and every status move has a test
MCP tools

Built for agents as well as people

Rostrum runs an MCP server, so an AI assistant can manage engagements, talks, and materials, preview the feed, and drive the Scout. 40 tools, 14 of them for the Scout.

Engagements

  • list_engagements
  • get_engagement
  • create_engagement
  • update_engagement
  • transition_engagement
  • delete_engagement

Talks

  • list_talks
  • get_talk
  • create_talk
  • update_talk
  • delete_talk

Materials

  • list_materials
  • get_material
  • get_material_text
  • create_material
  • add_material_version
  • update_material
  • delete_material
  • link_material
  • unlink_material

Profile and feed

  • get_profile
  • set_profile
  • get_dashboard
  • get_feed_preview

Scout

  • get_scout_preferences
  • set_scout_preferences
  • start_scout_run
  • list_scout_runs
  • get_scout_run
  • cancel_scout_run
  • get_scout_spend
  • list_scout_events
  • get_scout_event
  • set_scout_event_status
  • list_recommendations
  • accept_recommendation
  • dismiss_recommendation
  • watch_recommendation

Operations

  • check_service_health
  • get_diagnostics
FAQ

Questions people ask

Who is Rostrum for?

A working speaker who gives talks, answers invitations, and answers calls for proposals through the year. It is a Renkara fleet tool, and today it serves one speaker's own engagements; every record belongs to one account. There is no sign-up on this site. Write to fleet@renkara.com with questions.

Can the feed expose my fee or my contacts?

No. The feed is built from an explicit allowlist, not by hiding fields. A fee, currency, travel note, host contact, private note, join link, audience description, or call-for-proposals detail is not in any format, and a test proves it. An engagement appears only when you mark it public and it is confirmed or delivered.

What happens when I change a bio or a deck?

A new version is created and the old one stays. Each engagement that used the material keeps pointing at the version it used, so its history never rewrites itself. You can move an engagement to a newer version on purpose.

Does the Scout spend money?

Its search and its recommendations call a language model, which costs money, so the Scout runs under a per-run cap and a monthly cap and stops at either one. With no model key configured, the free dataset import still runs and the paid steps are skipped. Every run shows what it spent.

Does the Scout act on its own?

No. It recommends. Accepting a recommendation creates a prospect engagement and a checklist for you to work through, and it never submits a proposal, sends a message, or books anything. Web pages it reads are treated as data, never as instructions.

Is the data in the screenshots real?

No. Every screenshot is a capture of the running app over invented records: a fictional speaker at StrataForge Robotics, a fictional company, with made-up conferences, organizers, and addresses on reserved example domains. The Scout screens were captured with the schedule off and no model key present, so nothing was searched or spent; its events, runs, and recommendations were written into a throwaway database.

Does it edit my slides, book travel, or send invoices?

No. Rostrum stores your decks and files with their versions, but it does not edit them. It does not book travel, issue invoices, or keep a contact book.

Why is the feed not just a page on my site?

Because your site should not hold the data. Rostrum keeps the records, and your website reads speaking.json (or any of the other formats) to draw its speaking page, so a confirmed talk shows up without anyone editing the site.

Contact

Questions about this tool?

Write to Renkara Media Group and a person will answer.