<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Flashlights</title><link>https://flashlights.app/</link><description>Recent content in Home on Flashlights</description><generator>Hugo</generator><language>en</language><atom:link href="https://flashlights.app/index.xml" rel="self" type="application/rss+xml"/><item><title>Mariatta</title><link>https://flashlights.app/organizers/mariatta/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/organizers/mariatta/</guid><description/></item><item><title>What Flashlights is</title><link>https://flashlights.app/docs/what-it-is/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/docs/what-it-is/</guid><description>&lt;p&gt;Flashlights is the portal your organising team, your volunteers and your speakers sign in to. Attendees have nothing to sign in to. It replaces the dozen spreadsheets an event usually runs on: who proposed what, who was invited, who has sent their slides, who is on which team, who is sponsoring at which tier, what goes in which room when.&lt;/p&gt;&#10;&lt;h2 id="who-it-is-for"&gt;Who it is for&lt;/h2&gt;&#10;&lt;p&gt;Open source communities, meetups and the smaller groups that run events: those that need more than spreadsheets and shared documents, and are not the large commercial organisations that can pay for an event management platform.&lt;/p&gt;</description></item><item><title>Features</title><link>https://flashlights.app/docs/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/docs/features/</guid><description>&lt;h2 id="program"&gt;Program&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Speaker intake.&lt;/strong&gt; People propose a session from their own account, the organisers&amp;rsquo; queue shows each proposal&amp;rsquo;s state, and a proposed session is approved or declined from its own page. A turned-down proposal can still be approved later. It is not a call for proposals system: there is no scoring and no reviewer assignment. An event that reviews elsewhere invites the speakers it has chosen.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Invitations.&lt;/strong&gt; Invite a speaker by email; accepting the invitation creates their account. A returning volunteer already has one.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Speaker profiles and sessions.&lt;/strong&gt; Each presenter has a profile, each session its presenters, and a person speaking twice is one person.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Checklists on both sides.&lt;/strong&gt; The organisers see what each speaker still owes; the speaker sees the same list from their side, with due dates that follow the talk, and reminders that go out on time.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;The schedule.&lt;/strong&gt; Rooms, slots and sessions, built in an editor and published through a program widget any website can embed and a read-only API.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Recordings and uploads.&lt;/strong&gt; Videos, slides and other files are kept in a private bucket of yours, next to the session, with a length check on uploaded video.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="people"&gt;People&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;One account per person.&lt;/strong&gt; Handles (website, GitHub, Discord, Mastodon, Bluesky, LinkedIn, Instagram, X) and pronouns belong to the account, and every form reads from them.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Volunteers.&lt;/strong&gt; An application form, a review, and a volunteer hub where speaker checklist items can be assigned to a person or a team.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Teams and permissions.&lt;/strong&gt; Each team grants permissions from a catalogue, with presets such as Organizers, Program, Sponsorship and Proposal reviewers. Naming a team&amp;rsquo;s leads, and changing what a team grants, are themselves gated by permissions. The settings organisers need left the Django admin.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="sponsors"&gt;Sponsors&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Sponsorship tiers, a prospectus link, contract requests sent to the people who handle them, donations, and the stats that go with them.&lt;/li&gt;&#10;&lt;li&gt;Sponsors never need an account; the organisers keep their record.&lt;/li&gt;&#10;&lt;li&gt;Switch the whole area off for an event that has none, and its pages are gone.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="the-numbers"&gt;The numbers&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;An organiser dashboard: onboarded volunteers, sponsorship and donations against their goals, attendee count, event tasks and what needs attention.&lt;/li&gt;&#10;&lt;li&gt;Stats pages for attendees (registered, first-timers, demographics when the fields are mapped), sponsorship and volunteers, a year-over-year comparison of registrations, proposals, sponsors and donors, and a JSON feed. Public by default, off with one switch.&lt;/li&gt;&#10;&lt;li&gt;Attendee records come from a Pretix shop through its API or a CSV export of whatever sells your tickets or takes your RSVPs. Flashlights registers nobody and sells no tickets; it keeps the records and counts them.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="editions"&gt;Editions&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;An edition is one event a year or a series of dates, in person, online or hybrid, with venues and rooms.&lt;/li&gt;&#10;&lt;li&gt;Recordings and community chat are settings of the edition, and the forms follow them.&lt;/li&gt;&#10;&lt;li&gt;Plan the next edition while the current one runs: organisers switch their working edition, speakers and invitation links follow their own.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="your-name-on-it"&gt;Your name on it&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The name, short name, description, logo, favicon, share image, docs link and terms link come from environment variables. Unset, a favicon and a share card are generated from the name and the colour.&lt;/li&gt;&#10;&lt;li&gt;One accent colour, from a preset or a custom value; the ink, hover and press shades are derived. The chrome around it is fixed, so every instance is recognisably Flashlights and recognisably yours.&lt;/li&gt;&#10;&lt;li&gt;Switches turn off volunteering, sponsorship and the public stats.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="runs-anywhere"&gt;Runs anywhere&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Four services: Postgres, Redis, an S3-compatible bucket from any provider (a second, private one when speakers upload files), and SMTP from any provider.&lt;/li&gt;&#10;&lt;li&gt;A boot contract with three processes, &lt;code&gt;web&lt;/code&gt;, &lt;code&gt;worker&lt;/code&gt; and &lt;code&gt;release&lt;/code&gt;, and a production boot that fails at once, naming every missing variable.&lt;/li&gt;&#10;&lt;li&gt;Documented on Heroku and compatible hosts, Azure Container Apps, Cabotage and a plain server. See &lt;a href="https://flashlights.app/docs/deploy/"&gt;Deploy&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="your-own-code-without-a-fork"&gt;Your own code, without a fork&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A community adds its own Django app to the image, and the app may replace a core template or static file.&lt;/li&gt;&#10;&lt;li&gt;Upgrades are a change of image tag, not a merge. See &lt;a href="https://flashlights.app/docs/adapt/"&gt;Make it yours&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="no-third-party-code-on-any-page"&gt;No third-party code on any page&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Every script, stylesheet, font, icon and chart is served by the instance itself. The only other host a page touches is your own bucket, for the pictures and files people upload.&lt;/li&gt;&#10;&lt;li&gt;No analytics, no advertising, no third-party cookies. The third-party services an instance talks to are on the server side: its bucket and its mail provider, plus Pretix and Sentry when you configure them.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="documentation-per-release"&gt;Documentation per release&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Each release publishes its own version of the &lt;a href="https://docs.flashlights.app/latest/"&gt;core documentation&lt;/a&gt;, and an instance&amp;rsquo;s help links point at the version it runs.&lt;/li&gt;&#10;&lt;li&gt;A community with docs of its own points the help links there and links back to the core docs at its pinned version.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Try it</title><link>https://flashlights.app/docs/try-it/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/docs/try-it/</guid><description>&lt;p&gt;There is no hosted demo, on purpose. An event portal only means something with people and roles in it, and the interesting side is the organisers&amp;rsquo;, which cannot be handed to strangers on a shared instance. On your own machine you get all of it.&lt;/p&gt;&#10;&lt;h2 id="what-you-need"&gt;What you need&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Docker with Docker Compose&lt;/li&gt;&#10;&lt;li&gt;GNU Make&lt;/li&gt;&#10;&lt;li&gt;Git&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="run-it"&gt;Run it&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/mariatta/flashlights.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd flashlights&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make serve&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open &lt;a href="http://localhost:8000/"&gt;http://localhost:8000/&lt;/a&gt;. The instance is empty; give it a domain and fill it:&lt;/p&gt;</description></item><item><title>Deploy</title><link>https://flashlights.app/docs/deploy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/docs/deploy/</guid><description>&lt;p&gt;An instance is one image, four services and a set of environment variables. Nothing in the code knows which host you chose.&lt;/p&gt;&#10;&lt;h2 id="the-image"&gt;The image&lt;/h2&gt;&#10;&lt;p&gt;Each release publishes &lt;code&gt;ghcr.io/mariatta/flashlights:X.Y.Z&lt;/code&gt;, a slim image for &lt;code&gt;amd64&lt;/code&gt; and &lt;code&gt;arm64&lt;/code&gt;, and &lt;code&gt;X.Y.Z-full&lt;/code&gt;, &lt;code&gt;amd64&lt;/code&gt; only, which carries the local transcription engine; transcription is then switched on in the environment and per edition. &lt;code&gt;X.Y&lt;/code&gt; and &lt;code&gt;latest&lt;/code&gt; follow the newest release. Pin a version in production and upgrade on purpose: until 1.0, read the &lt;a href="https://flashlights.app/changelog/"&gt;changelog&lt;/a&gt; entry before you do.&lt;/p&gt;</description></item><item><title>Make it yours</title><link>https://flashlights.app/docs/adapt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/docs/adapt/</guid><description>&lt;h2 id="configure"&gt;Configure&lt;/h2&gt;&#10;&lt;p&gt;Most of what makes an instance yours is environment variables, read at boot:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: &lt;code&gt;SITE_TITLE&lt;/code&gt;, &lt;code&gt;SITE_SHORT_NAME&lt;/code&gt;, &lt;code&gt;SITE_DESCRIPTION&lt;/code&gt;, and the absolute URLs &lt;code&gt;SITE_LOGO&lt;/code&gt;, &lt;code&gt;SITE_FAVICON&lt;/code&gt; and &lt;code&gt;SITE_OG_IMAGE&lt;/code&gt;. Unset, a favicon and a share card are generated from the title and the colour.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Colour&lt;/strong&gt;: &lt;code&gt;BRAND_PRESET&lt;/code&gt;, one of &lt;code&gt;beam&lt;/code&gt;, &lt;code&gt;teal&lt;/code&gt;, &lt;code&gt;copper&lt;/code&gt;, &lt;code&gt;indigo&lt;/code&gt; or &lt;code&gt;raspberry&lt;/code&gt;, or &lt;code&gt;BRAND_PRIMARY&lt;/code&gt; with your own &lt;code&gt;#rrggbb&lt;/code&gt;. The ink on it, its text shade and the hover and press shades are derived.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Links&lt;/strong&gt;: &lt;code&gt;DOCS_URL&lt;/code&gt; for your community&amp;rsquo;s own documentation, &lt;code&gt;TERMS_URL&lt;/code&gt; for your terms of service. The code of conduct, the sponsorship prospectus and the schedule link belong to the edition and are set in the portal.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Switches&lt;/strong&gt;: &lt;code&gt;VOLUNTEERING_ENABLED&lt;/code&gt;, &lt;code&gt;SPONSORSHIP_ENABLED&lt;/code&gt; and &lt;code&gt;STATS_PUBLIC&lt;/code&gt;. Off, the area&amp;rsquo;s pages are gone and its navigation with them.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Contacts&lt;/strong&gt;: &lt;code&gt;SPONSORSHIP_EMAIL&lt;/code&gt; and &lt;code&gt;ACCOUNTING_EMAIL&lt;/code&gt;, who receives a sponsorship contract request.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Everything else organisers need is set inside the portal: editions, venues and rooms, teams and their permissions, checklist templates, the code of conduct and prospectus links. The &lt;a href="https://docs.flashlights.app/latest/user/adapting/"&gt;adapting guide&lt;/a&gt; in the core documentation goes through what you can change without code.&lt;/p&gt;</description></item><item><title>Changelog</title><link>https://flashlights.app/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/changelog/</guid><description>&lt;p&gt;Each release publishes the image &lt;code&gt;ghcr.io/mariatta/flashlights:X.Y.Z&lt;/code&gt; (and &lt;code&gt;X.Y.Z-full&lt;/code&gt;, &lt;code&gt;amd64&lt;/code&gt; only, with the local transcription engine) and a &lt;a href="https://github.com/mariatta/flashlights/releases"&gt;GitHub release&lt;/a&gt; with the entry below. Until 1.0, read every entry before upgrading; from 1.0, a change to the public API for community apps is marked &lt;strong&gt;Breaking&lt;/strong&gt;. This page mirrors &lt;code&gt;CHANGELOG.md&lt;/code&gt; in the repository.&lt;/p&gt;&#10;&lt;h2 id="010-2026-10-21"&gt;0.1.0 (2026-10-21)&lt;/h2&gt;&#10;&lt;p&gt;The first release of Flashlights, derived from the &lt;a href="https://github.com/pyladies/pyladiescon-portal"&gt;PyLadiesCon portal&lt;/a&gt;.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Identity is configuration.&lt;/strong&gt; The name, colours, logo, favicon, share image and links come from environment variables, so one image serves any community. The design system (tokens, self-hosted fonts and icons) restyles every page.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;One instance per community, an edition per event.&lt;/strong&gt; Editions are one event a year or a series of dates, with venues and rooms, a format (in person, online or hybrid), recordings and community chat as settings, and the next edition planned while the current one runs.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Permissions through teams.&lt;/strong&gt; Each team grants permissions from a catalogue, with presets such as Organizers, Program, Sponsorship and Proposal reviewers; the settings organisers need left the Django admin.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Speakers.&lt;/strong&gt; Invitations, profiles, sessions, two-sided checklists with reminders, the schedule, video and file uploads, and a public program widget and API.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Attendee records&lt;/strong&gt; from Pretix or a CSV export, for the stats.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Handles per person&lt;/strong&gt;: social links and pronouns belong to the account, and every form reads from them.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Runs on any host.&lt;/strong&gt; The boot contract (&lt;code&gt;web&lt;/code&gt;, &lt;code&gt;worker&lt;/code&gt;, &lt;code&gt;release&lt;/code&gt;) and the environment reference cover Heroku and compatibles, Azure, Cabotage and a plain server; switches turn off volunteering, sponsorship and the public stats.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Community apps&lt;/strong&gt; add a Django app to the image with &lt;code&gt;EXTRA_APPS&lt;/code&gt;, and may replace a core template or static file.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Documentation per release.&lt;/strong&gt; Each release publishes its own version of the docs at &lt;code&gt;https://docs.flashlights.app/X.Y.Z/&lt;/code&gt;, and &lt;code&gt;latest/&lt;/code&gt; follows the newest release.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Nothing loads from anywhere else.&lt;/strong&gt; Every script, stylesheet, font and chart is served by the instance itself, with Dependabot watching the vendored libraries. Sentry receives personal data only with &lt;code&gt;SENTRY_SEND_DEFAULT_PII&lt;/code&gt; on.&lt;/li&gt;&#10;&lt;li&gt;Free software under the GNU AGPL version 3, with a permission to run a modified copy for your own organisation&amp;rsquo;s events.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>About Flashlights</title><link>https://flashlights.app/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/about/</guid><description>&lt;p&gt;&lt;strong&gt;Flashlights&lt;/strong&gt; is the organisers&amp;rsquo; portal for events, summits and meetups. It runs the parts of an event nobody in the audience sees: a lightweight speaker intake, the speakers and their files, volunteers and teams, sponsors, the schedule, and the emails that hold it all together.&lt;/p&gt;&#10;&lt;p&gt;It was not designed in the abstract. It is derived from the &lt;a href="https://github.com/pyladies/pyladiescon-portal"&gt;PyLadiesCon portal&lt;/a&gt;, the software built to run PyLadiesCon, a volunteer-run online conference, and it keeps pulling improvements from it. That portal was built for one highly specific purpose, and it is good at it. Its author also organises communities that are nothing like PyLadiesCon, a one-day summit inside a large conference and a monthly meetup chapter among them, and they turned out to need most of the same things: somewhere for speakers to send their files, a team with the right access, sponsors kept track of, a schedule, and the emails. Flashlights is that portal made to serve any of them.&lt;/p&gt;</description></item><item><title>Mariatta</title><link>https://flashlights.app/authors/mariatta/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://flashlights.app/authors/mariatta/</guid><description>&lt;p&gt;Mariatta makes Flashlights and is setting up its first two instances.&lt;/p&gt;</description></item></channel></rss>