Changelog

Everything we ship — new features, fixes and performance improvements, newest first. No account needed to read this page.

72 changes · updated Oct 26, 2026 · this build: 1.7.0

1.7.0

Oct 26, 2026 · 22 changes
New

The last three emails look like Ekklesia too

  • The welcome, the confirmation you receive after changing your password, and the notice that tells you your account is locked were still plain Arial text with no mark and no footer — the only emails left that did not look like they came from us. They now use the same page as every other message we send.
  • Each says only what it is for. The welcome points at the sign-in page. The reset confirmation is a receipt with nothing to click, because there is nothing to do. The locked notice gives the three steps that actually unlock an account: choose Forgot Password, open the email, set a new password.
  • The reset email no longer suggests turning on two-factor authentication. We do not offer it yet, and a security email should not recommend a feature that isn't there.
Fix

The phone field keeps the country you pick

  • Choosing a country in a phone field looked like it did nothing: pick Singapore and the flag and dial code fell back to +63 before you could type a number. It only behaved when a number was already in the field, which is why it read as intermittent.
  • The cause was the field talking to itself. Every change it reported was handed straight back to it as the current value, and an empty number is reported as nothing at all — so the field parsed that nothing, found no country in it, and reset the select to the Philippines in the same moment you had changed it.
  • It now recognises its own echo and leaves your choice alone. Clearing the number no longer resets the country either.
New

The pages you reach when something has gone wrong

  • When the platform is closed for maintenance, or when a page is not yours to open, you used to land on a bare message inside the admin frame. Both now use the same sheet as the rest of the public pages: what happened, what it affects, and one way forward.
  • The maintenance page names the surface that is down, when it started, and that no data has been lost; it also tells you plainly when the mobile app is unaffected, so an admin does not assume the whole platform is gone. Its button re-checks, and signs you out if you would rather leave.
  • The page for a page you cannot open now says which of the real reasons applies — your role, a missing permission, a satellite church reaching a parent-church page, or a feature this workspace does not have. None of them offers an upgrade, because there is nothing to buy.
New

An invitation has a page of its own

  • Opening an invitation link, joining with a code, and the screen after you join were three different-looking pages. They now share one sheet, so a person who has never seen Ekklesia meets the same page whether they were invited by email or handed a code on paper.
  • The invitation shows who invited you, to which church, and what the link will do before you accept it. A link that has expired, been used, or belongs to another church says so plainly and offers the way to ask for a new one, rather than failing after the click.
  • The same page carries the set-password step, so a new member stays in one place from the link to their first sign-in.
New

The long pages are readable now

  • The terms, the members' terms, the privacy policy and this changelog were set the way the app sets a dense screen: a narrow column, heavy headings, and a contents rail that scrolled inside itself. They are documents people read, so they are now set as documents — one measured column, a serif heading, and links that look like links.
  • The changelog keeps its filters and its release groups, but the labels are sentence case rather than shouted, the entries are rows rather than cards, and the version you are reading sits at the top of the page instead of inside the text.
  • Nothing about what the pages say changed. Only how they read.
New

Our emails look like Ekklesia

  • Every email we send — the approval, the decline, the usage warning, the invitation — used to be built from its own colours, its own type and a blue that belongs to no part of this product. They now share one page: the mark, a red rule, a serif headline, sand for the details, and an ink footer.
  • The email carrying your sign-in code was the last one that did not use the layout at all: it was plain text assembled in code, which is why it was the only message a new member received that did not look like us. It is now a template like the rest, and the code is the largest thing in it.
  • No email mentions a plan, a price or an upgrade any more, because there are none. The emails that existed only to describe a plan have been removed rather than left to send something untrue.
Fix

An admin could not sign in after billing was removed

  • With the paid plans gone, signing in to the admin panel failed with an error about a billing policy that could not be found. The panel still expected the object that answers questions about plans and payments, and the part of the app that serves it had stopped being registered.
  • It is registered again for the web app, and a test now boots the real host and asks it for every service the admin layout needs, so a missing registration fails the build rather than the sign-in.
New

Ekklesia is free. There is nothing to buy.

  • Plans, prices, trials, payment proofs and the approval queue are gone. A church gets the whole product — announcements, events, giving, merchandise, reports, the member app — without a card, a quote or a sales conversation. There is no feature held back for a higher tier, because there are no tiers.
  • Signing up used to end in a payment step and a wait for a reviewer. It now ends with a working workspace: the church is created, its first administrator is you, and the first thing you see is the panel rather than a status page.
  • Existing churches are unaffected. Nothing was taken away, no data moved, and the billing screens that remain are the records of what was paid before, kept because deleting financial history is not a thing we do.
New

Setting up a church takes one form, not a funnel

  • Creating a church used to be four steps with a plan choice in the middle. It is now a single short form — the church, then you as its administrator — and the review step simply confirms what you typed.
  • Your email is verified with a six-digit code inside the form, so the address that will receive the church's mail is proven before the workspace exists. The code boxes sit where the form expects them rather than centred under the field.
  • The button that creates the church stays disabled until you have accepted the terms for churches, the terms of service and the privacy policy. One switch, three documents, all named — the form no longer tells you the terms were not accepted after you have already clicked.
New

The public site, rebuilt around one sentence

  • The home page, the support page and every page behind them were carrying three designs at once. They now share one: a paper ground, a serif headline, one red, and real screens of the product instead of illustrations of it.
  • The first screen says what the thing is and what it costs in the same breath — Ekklesia, free for every church — because those are the two questions a visitor arrives with. Supporting the work is still there, and still separate from a church's giving: it is a page you can choose to visit, not a step in the product.
  • The pages are also lighter. The opening animation that could leave the page blank is gone, and the copy is shorter everywhere it was repeating itself.
Fix

The home page no longer opens blank

  • On a first visit the home page could arrive empty and only fill in after a reload. The sections were waiting for an animation to reveal them, and the fallback that was meant to reveal them never ran for most of them — so the content was there, invisible, behind an effect.
  • The page now paints its content first and animates from there. If the animation never runs, or the visitor has asked their system for less motion, the page is simply complete.
Fix

Sign In is reachable on a phone again

  • On a narrow screen the header's Sign In link was being pushed out of the bar by the two buttons beside it, leaving a visitor who already had an account with no way in from the home page.
  • The bar now keeps the link and moves the buttons, which is the opposite of what it did before and the right way round: the primary action can wrap, an existing customer's way back cannot disappear.
New

Members can see their events by what they are part of

  • The member app's events list now answers the question people actually ask — what am I doing, what have I said yes to, what is coming — with tabs for upcoming, mine, and the events a member has registered for, instead of one long list.
  • Each tab is a real page of results from the server rather than a filter applied after everything has arrived, so a church with a full calendar opens as quickly as one with three events.
  • The old way of asking for every event still works, so a link saved before this change does not break.
New

A satellite church can use its parent's payment methods, or its own

  • A satellite church used to inherit its parent's GCash and bank details with no way to say otherwise, which is wrong the moment a satellite holds its own accounts. It can now keep the parent's methods or set its own, and the choice is visible on the payment settings page.
  • A channel that is already in use can no longer be switched off and re-offered at the same time; the page disables it and says why. The QR image is optional again — a church that only has an account number can save the method without one.
Fix

Settings stopped opening the wrong page, and stopped lying about saving

  • Clicking a section in Settings could take you to Event Types instead of the section you asked for, because the page treated the click as a navigation and then re-used the previous section's state. Each section now opens itself.
  • The same pages used to make you press Save for a single switch. They now commit as you change them and say so, which removes the class of bug where a setting looked changed and had never been sent.
  • Publishing an announcement no longer warns that it will be permanently removed — it was reusing the wording from Delete. Publishing publishes.
New

You can limit how many people an invite code admits

  • An invite code used to be bounded only by time: it stayed usable until it expired, and anyone holding it could join. Beside the expiry you can now set a maximum number of people the code will admit — the first few through are let in and the code then stops, whichever of the two limits it reaches first.
  • Someone trying a code that has run out is now told plainly that it is no longer usable and to ask the church for a new one. Until now the same message also covered a code that never existed and one that had been switched off, so a member holding a superseded code was told to check for a typo rather than to ask for a new one.
  • The limit is set on the Invite Code page, beside the expiry that was already there, and the page now says in plain words what the code will do — "Only the first 5 people can join with this code", or "Unlimited uses" — instead of a line that would have become untrue the moment you set a cap.
New

A welcome video sits under the home page's opening

  • The public home page now opens with a short animated welcome from the team, just below the hero and above the walk-through of how your church runs.
  • It does not start on its own: the clip carries a music bed, and a browser will not let video that makes sound play by itself, so it rests as a still frame with a "Watch the welcome" button and plays when you ask it to. Read on and nothing moves.
  • It is kept off the page's first load, so the home page is no heavier to open than before, and once you have watched it your browser keeps it rather than fetching it again.
Fix

The first character you type is kept

  • Across the admin, a field could swallow the first character you typed: you would press a key, the field would show nothing, and you could begin a word and lose its first letter. Event names, registration fees, announcement titles, summaries and priority were all reported, and every field of that kind shared the fault.
  • The cause was a quiet one. While you typed, the field redrew itself and was told to write the text back into the box — and that write cleared the character you had just entered. The field is now left alone once you have started typing, so nothing you type is taken away and the cursor stays where you put it.
Fix

The welcome email tells a new member how to get the app

  • When a member is added to your church, the email carrying their sign-in details used to name the app and leave it there, with no way to find it. It now leads with the download button for the App Store, and below it the email address and temporary password, with a reminder to change the password after the first sign-in.
  • Android is described honestly: the member app is iOS only for now, so the email says Android is coming soon instead of linking somewhere that does not exist.
Fix

Your church banner and your uploaded images now save and display

  • Changing your church banner or logo looked as though it had worked — the upload finished and every message said so — but the change was undone a moment later, so the banner you set never appeared. What you upload is now carried through to the save, on Church Profile and on a satellite church's page alike.
  • A picture you had uploaded could also show as a broken image: the banner on your church profile, and product images in Merch. Nothing was wrong with the file or with the upload; the address the page gave your browser pointed at the wrong place, so the browser could not fetch it. That address is corrected, and images you uploaded before display properly without needing to be uploaded again.
Fix

The line you agree to no longer repeats a version number

  • Where a member is asked to accept the Terms of Service and the Privacy Policy — signing up, joining a church, accepting an invitation, creating a workspace, or accepting an updated document — the version number that used to sit beside the tick box is gone. It was never needed there: the version still sits on each document, where you can see which one you are reading and which one you agreed to.
  • The two documents' links also sit further apart and have room to wrap, so on a narrow screen they no longer run into the word joining them.
New

You can see what your members have agreed to

  • When someone joins your church, accepts an invitation, or signs up, they now have to agree to the Terms of Service and the Privacy Policy before their account is created — and we record it: which version of each document, and when. Your church's own acceptance of the Terms for Churches is recorded the same way when your church is created.
  • The records are on a new Legal acceptances page, showing your church's record: the document, its version, who agreed and when. It answers the question a church is actually asked — "what did this person agree to, and when?" — which a checkbox on its own never could.
  • The documents are now published with their version beside the date, so you can see which one you are reading and which one you agreed to.
  • If a document is ever changed in a way that affects your rights or how your data is handled, you will be asked to accept the new version at your next sign-in rather than it passing silently. Routine edits that change nothing important will not ask you again, so agreeing stays something you mean.
  • Accounts created before this change are not asked to accept anything retrospectively, and nothing appears against them — we show absence as absence rather than assuming an agreement nobody made.

1.6.0

Oct 10, 2026 · 4 changes
New

Members can ask to serve, and you decide

  • Until now the only way someone became a volunteer was for an admin to put them there, which is not really volunteering. A member can now ask to serve from the event in the mobile app, and the request appears on that event's Volunteers tab — with what they would like to help with and when they asked.
  • You approve or decline each one. Approving puts them on the roster for that occurrence and records the ministry they will serve in, so you can accept the one they asked for or choose another they are eligible for. Declining asks you for a reason, because the member is shown it.
  • Both decisions reach the member in their in-app notifications and on their phone; neither sends email. A member can withdraw a request while it is still waiting, and nobody is told when they do.
  • Only a member of your church can ask, and only for a ministry the event actually needs. A follower, a visitor, or a member with nothing to do at that event sees no button at all, rather than a refusal.
Fix

An admin who belongs to more than one church can always sign in

  • If your account administered more than one church, the sign-in check could settle on the wrong one of your records and turn you away with "This site is for church admins only" — even though you were an admin. It could also give you a different set of permissions than you were entitled to, so a page you should be able to use was out of reach until you signed in again and got luckier.
  • Sign-in now settles on your admin record the same way every time, preferring an active one, so the answer no longer depends on the order the database happens to hand your records back.
Fix

Search engines are told when our pages change

  • Every public page now states the date it last changed. When we update a price, a policy or the changelog, search engines can notice sooner instead of waiting for their next scheduled visit — previously they had no signal at all, so a page could sit in search results behind an out-of-date description long after we had fixed it.
Fix

Public pages no longer redraw themselves after they open

  • A page would appear, then rebuild the whole thing over the top a moment later, so one visit looked like two. Each page is drawn once now and left alone.
  • The public pages also stop loading the parts of the app they never use, so there is less to fetch before a page settles.

1.5.1

Oct 10, 2026 · 2 changes
Fix

Pages no longer play their opening animation twice

  • Opening a public page faded its content in, then faded it in again a moment later: one page load that looked like two. The animation now runs only when you follow a link inside the site, which is the only time it was meant to.
Fix

Search results show the title written for each page

  • Every public page was serving two page titles at once, and a search engine takes the first it meets, so the short generic one was winning over the title written for that page. Each page now declares exactly one.

1.5.0

Oct 10, 2026 · 7 changes
New

The Invite Code section is available to every admin

  • Invite Code is now its own permission, granted to every admin role, instead of riding on the settings permission. It sat behind a check that no assignable role passed, so the section was visible only to the platform operator and read as missing for everyone else.
New

Every admin page and every action now checks its permission

  • Twenty-five pages had no check at all: an admin who could not see a link could still type the address and use the whole page. Every page is now checked before it opens.
  • Actions inside a page are checked before they are offered, so the panel no longer paints a button the API will refuse and then report as an error after you click it.
  • Four read permissions were added, so a role can be given read-only access to members, events, announcements or ministries without also being able to change them.
  • Exporting now needs its own permission instead of riding on the reports permission it never actually used. Events, Users and View-only admins keep everything else and lose export until you grant it; Reports and Finance admins keep it.
Fix

Five permission defects found while testing the new checks

  • Finance was shown a Members entry it could not open, while Church Profile sat behind a members-only check. The two were effectively swapped; each now follows the permission its own page requires.
  • Merch opened for a plan that included it and then failed on every call, because the page and the API were asking for different permissions.
  • Members opened but listed nothing for four roles, because the page and its list were guarded by two different permissions.
  • Reports showed Members and Events access that was real, but had no switch on the appointment form to grant or revoke it.
Fix

Opening a page no longer flashes a blank screen

  • A page you are entitled to open briefly replaced the whole screen with a loading bar before it appeared. The check was reading "no decision has been made yet" as "not allowed".
  • You could tell the two apart by where the spinner sat: centred on a first load, top-centre when a page was swapped back in.
New

The public website was rebuilt

  • The home page opens on a live demo of the mobile app, with screens that advance on their own — and it holds still for anyone who has asked their device to reduce motion.
  • How it works steps through the app with the screens layered behind it, instead of sitting as one still picture.
  • Seven public pages now share one navigation and one footer, so the site stops drifting between them.
  • The pricing on the home page is read from the plans themselves, so it can no longer disagree with what checkout charges.
Fix

The public site's grey text is readable, and its pages are no longer held up

  • Muted text on the light pages measured as little as 2.1:1 against its background, where 4.5:1 is required — it was a colour chosen for dark surfaces and never re-tuned for light ones. All 24 contrast failures are fixed and dark mode is untouched.
  • Four third-party stylesheets were blocking the first paint of every page, including pages that use none of them. They now load without holding up the page, with a fallback for browsers without scripting. Fonts, maps and the editor all still load.
Fix

Enterprise is described honestly when a church signs up

  • Enterprise was offered as a plan anyone could select, but the signup never asked for payment — so a workspace could be created with nothing behind it. It is now a "Talk to us" contact: still shown, so you know it exists, but not selectable, because there is no self-serve price for it.
  • The signup says so plainly rather than accepting a request it cannot complete.

1.3.0

Oct 04, 2026 · 4 changes
New

Storage allowances now say exactly what each plan includes

  • Free Trial includes 10 MB, Starter 50 MB, Professional 500 MB and Enterprise 1 GB.
  • Sizes show in the unit that fits them, so a small plan reads in megabytes instead of rounding down to zero.
  • Pricing, Church Profile and checkout all show the same figure for the same plan, and Church Profile shows the amount actually enforced for your church family.
Fix

A newly created church starts with its plan's limits

  • A church set up through the signup flow now begins with its plan's member and storage allowances already applied, instead of starting with none.
  • Changing a church's plan applies that plan's limits rather than only its name.
New

Collapse the sidebar and the icons still explain themselves

  • Hovering an item on the collapsed sidebar shows its name, so the rail stays useful when you want the space back.
  • Tooltips settle where they belong and fade out, instead of blinking into place.
Fix

Typing is never interrupted

  • Typing quickly no longer replaces characters you have already entered.
  • A field keeps what you typed when the page refreshes around it.
  • Search boxes no longer hold on to a previous term, and the controls sit on one line with their label.

1.2.0

Oct 02, 2026 · 8 changes
Fix

Inviting someone to a satellite church behaves predictably

  • An invited admin no longer gets access to the church before accepting the invitation.
  • The invitation belongs to the church it was sent for, so accepting it cannot land the person in a different one.
  • The admin list counts admins, not unanswered invitations.
Fix

Figures are counted for the right church

  • Dashboard giving totals and the refund summary count only the church you are viewing.
  • A satellite church is no longer offered group-management menus it cannot use.
  • An asset list reports a failed load as a failure, instead of showing an empty list.
New

Event and announcement types belong to each church

  • Types are now managed per church, so one church's categories no longer appear in another's.
Fix

Assigning an admin is clearer

  • Searching for a member is no longer case-sensitive, and picking someone shows their name, photo and address as a single card.
  • When someone is already a member the page says so, rather than offering to invite them again.
  • A search that finds nothing says which churches it looked in, and offers the way forward.
Fix

Tables and cards read consistently

  • Table borders, header rules and card corners are uniform across the admin.
  • The Assets table is readable and its availability value is correct; the Product variants table works on a phone.
  • Payment history sits in the page rather than inside a nested card, and Church Profile's billing section is on the same card system as everything else.
New

Church Profile explains what your family shares

  • The member-seats and storage figures carry an explanation of what is shared between a church and its satellites, and what is not.
  • The header logo returns you to the dashboard, and the brand reads Ekklesia PH.
Performance

The public site loads faster

  • Pages and images are compressed and cached, so repeat visits are quicker.
  • Dark-mode text contrast was corrected, and headings follow a proper order for screen readers.
New

Recurring events can be changed one occurrence at a time

  • Editing a recurring event asks whether you mean this occurrence only, or this and everything after it.
  • Volunteers are recorded per occurrence instead of for the whole series.
  • Each event shows the next date a member would attend.
  • The occurrence notice sits in the event header, and a saved occurrence edit stays on the calendar.

1.1.0

Sep 30, 2026 · 25 changes
Fix

The Dashboard states what its figures cover

  • A platform-wide view says so plainly, and the page carries one heading with the greeting in it.
Fix

My events shows which church each event belongs to

  • Each row now names the church that owns the event, so the same event name in two churches is no longer ambiguous.
  • Draft events are no longer returned — only published events appear.
New

A public changelog

  • This page. Everything we release, written for the people who use it, readable without an account.
  • Linked from the footer of the public site and from the admin sidebar.
New

Event reminders now reach every start time

  • Reminders fire for events starting at any minute. Previously only events starting on the hour were reached, so an event at 6:30 PM could never be reminded.
  • The reminder says how much time is actually left, and a completed event can be revived.
  • Push no longer depends on the email preference — a member with email switched off still gets the push.
New

Guest invite links work end to end

  • An invitation link now recognises its token, and accepting it makes the person a member.
  • First name and surname are captured separately, and a bad email is flagged in the form rather than after submitting.
  • The Invite action sits with the other row actions, beside Remove.
  • The waitlist email honours the member's notification preference.
Fix

Recurring events step by calendar unit

  • Weekly, biweekly, monthly and yearly series step by calendar unit instead of a fixed number of days.
  • Recurring calendar bars no longer overlap — your own timezone is applied once.
  • Registration and check-in work past the first occurrence.
Fix

One date rule, everywhere

  • An end date before the start date is rejected on every screen, consistently.
  • An event with no end date completes at the end of its local day, not at its start.
Fix

Giving settings and receipts

  • The two giving toggles now control different things, and the settings screen says which is which.
  • Giving receipts keep their PDF attachment.
  • Event times render in your church's own timezone, not raw UTC.
Fix

Dates and times follow your timezone

  • Every date you enter is stored the same way and shown back in the timezone your browser reports, so a date no longer changes meaning depending on who opens it.
  • This applies across events, givings and reports — including the date picker's own "today".
Performance

Avatars are served at the size they are drawn

  • Member images are resized for the surface showing them, instead of sending the original upload — previously up to 6000px — to every list and card.
Performance

Faster admin pages

  • Summary cards are computed once per load instead of on every render, across givings, events, assets, merch orders, ministries, satellite churches and users.
  • Lists and their counts are fetched together, so badges no longer arrive after the rows.
  • The reports screen reserves space while loading, removing a large layout shift.
  • The group event report and refund summary no longer issue one query per row.
Fix

The admin works properly on phones

  • Summary card values no longer overflow their card and get clipped at the screen edge.
  • Filter toolbars and stat grids reflow at phone widths.
  • Card headers sit in the right place on small screens.
New

A consistent design system across the whole admin

  • Every table, select, input, button, modal, card and image in the admin now comes from one shared component library, so a pattern looks and behaves the same wherever you meet it.
  • Colour pickers, charts and switches are shared components too, replacing one-off versions that looked nearly — but not exactly — alike.
  • The component library has its own documentation site, listing each component with its options.
New

Redesigned pages

  • Church Profile, Profile, Settings, Events, Event Details, Ministry Details, Announcements, Product Details, Asset add/edit, Invite Code, Change Password, Refund Requests, Borrow Requests, Merch Orders and Satellite Churches were each rebuilt around a consistent layout.
  • Pages that had grown extra panels and duplicated facts were reduced to one place for each fact.
New

Dark mode

  • Dark mode was corrected across the admin — accent colours are legible again on dark surfaces instead of sinking into the background.
New

Undo for deletions

  • Deleting or deactivating a record now offers an Undo in the confirmation toast, and the row comes back on screen without a reload.
  • Undo stays available while you hover the toast, so a long confirmation is not cut short.
New

A calendar view for events

  • Events can be viewed as a month calendar, with multi-day events drawn as spanning bars.
  • Hovering an event opens a quick view without leaving the calendar, and clicking a date starts a new event there.
  • Your chosen view is remembered.
New

Giving history and voiding

  • A giving record can now be voided instead of deleted, keeping the record, its receipt and its audit trail.
  • Each giving has a history panel showing who changed what and when.
  • The Givings page gained a time filter and a unique-givers summary.
New

Search and filters that keep up

  • Filter controls accept several values at once and summarise the selection instead of showing only the first.
  • Selects flip upward near the bottom of a page instead of opening off-screen.
  • Search fields no longer overlap their own icon, and no longer search the previous term while you type.
New

Reports rebuilt

  • Every report was rebuilt on the shared component library, with corrected figures: a finance total that was missing giving, event counting, organisation totals, and merch orders disappearing from totals.
  • Adds a role-over-time chart and search on the organisation reports.
New

Admin permissions are enforced

  • Admin capabilities are now checked against the API, not only used to hide buttons. A page a role cannot use renders a clear denial instead of a broken shell that fails on every action.
  • The Reports section follows the View Reports permission it actually needs.
New

Locations and venues

  • Location entry has a working map picker and server-side geocoding, so a venue is confirmed on the map rather than typed and hoped for.
  • Events carry a venue label, shown wherever the full address would have been printed.
New

Register a guest for an event

  • Admins can register someone who has no account for an event, without creating one first.
Fix

Push notifications reach the right account

  • A device's push token could belong to several accounts at once, so a member who signed out kept receiving notifications. Signing out now releases the token and names the device.
New

Discipleship

  • Discipleship requests are one live request per person, not one per pair and type.
  • Relationship-gated profiles: a member's details are visible to their discipleship counterpart, including their profile picture.
  • A taken phone number is explained, instead of reporting an unexpected problem.

Built, but not switched on yet

These are finished and will appear in the app once the reason below is resolved. We list them so nothing is a surprise later — they are not usable yet.

Not yet

Event promotion videos and recordings

Built and ready, but switched off for now: our storage cannot accept files this large yet. The feature is finished and will be turned on once storage allows — nothing needs to be rebuilt.

  • Promotion videos can be uploaded on an event, with per-card upload progress.
  • Post-event recordings can be added and edited.