<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docs on Flashlights</title><link>https://flashlights.app/docs/</link><description>Recent content in Docs on Flashlights</description><generator>Hugo</generator><language>en</language><atom:link href="https://flashlights.app/docs/index.xml" rel="self" type="application/rss+xml"/><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></channel></rss>