Built with Modern Technology

We use battle-tested, enterprise-grade technologies to ensure Presently is fast, secure, and reliable. Here's what powers your studio management platform.

Technology Stack

Core Framework

Laravel 12

PHP Framework

The most popular PHP framework, known for elegant syntax, robust security features, and excellent developer experience.

Livewire & Volt

Reactive UI

Build dynamic, reactive interfaces without writing JavaScript. Provides a smooth, SPA-like experience with server-side rendering.

Tailwind CSS

Styling

Utility-first CSS framework for rapid UI development. Ensures consistent, responsive design across all devices.

Flux UI Pro

Component Library

Premium Livewire component library providing beautiful, accessible UI components out of the box.

Vite

Build Tool

Lightning-fast build tool for modern web development. Instant hot module replacement during development.

Alpine.js

JavaScript

Lightweight JavaScript framework for adding interactivity. Perfect companion to Livewire for client-side behavior.

Infrastructure & Performance

Redis

Caching & Queues

In-memory data store for lightning-fast caching and background job processing. Sub-millisecond response times.

Meilisearch

Search Engine

Blazing fast, typo-tolerant search engine. Find families, students, and classes instantly as you type.

Laravel Reverb

WebSockets

Real-time WebSocket server for instant updates. Powers live chat, notifications, and real-time data sync.

DomPDF

PDF Generation

Generate professional PDF reports, invoices, and statements. Export rosters, schedules, and financial documents.

Intervention Image

Image Processing

Automatic image optimization and resizing. Ensures fast load times while maintaining quality.

Activity Log

Audit Trail

Complete audit trail of all data changes. See who changed what and when for full accountability.

Payments & Security

Stripe

Payment Processing

Enterprise-grade payment processing. PCI DSS Level 1 certified with 99.99% uptime. Supports cards and ACH.

Laravel Fortify

Authentication

Secure authentication with two-factor authentication, password confirmation, and email verification.

Spatie Permissions

Access Control

Fine-grained role and permission management. Control exactly what each user can see and do.

Analytics & Communication

PostHog

Product Analytics

Privacy-friendly product analytics to understand usage patterns and continuously improve the platform.

Postmark

Email Delivery

Industry-leading email deliverability. Your emails land in inboxes, not spam folders.

ApexCharts

Data Visualization

Beautiful, interactive charts for financial reports and analytics dashboards.

Changelog

We ship improvements constantly. Here's what's new in Presently.

July 2026 Latest
  • Public registration wizard — a full-length overhaul of the new-family signup. The wizard now requires a phone number at step 1 (with an optional label field, no duplicate "Primary" badge, and no more silent submits that leave the studio without a way to reach the family), hides pre-approval-only classes from the browse tile grid so families don't see something they can't enroll in, waitlists full classes gracefully instead of blocking checkout, and stamps registration_completed = true on the family the instant they finish a portal enrollment or an admin creates one for them — closing a long-standing gap where real families kept appearing on the "abandoned registrations" list
  • Abandoned Registrations is now a first-class admin surface under Setup → Abandoned Registrations. Studios can review every family that started signup but never finished, send an ad-hoc reminder email at any of five intervals (2 hours, 24 hours, 48 hours, 1 week, 1 month — the last two are new, with a softer prose tone that reads like a note from a person rather than an automated nudge), or move stale rows to Trash one at a time or in bulk. The nightly auto-cleanup is now opt-in per tenant (default off) so no studio ever wakes up to find real signups quietly deleted
  • Portal cart got a comprehensive rework: existing account balances now roll into the checkout charge so a family paying for a new enrollment settles what they already owed at the same time, past-due billing sessions are auto-charged at checkout instead of lingering, mid-season enrollments no longer bill for months the student won't attend, the immediate charge amount includes a plain-English breakdown so families understand why it's smaller than a full month, and a nightly job clears stale carts so a family who abandoned checkout two weeks ago doesn't come back to phantom holds. On the admin side, a "Absorb into cart" flow lets a family resume a stalled signup by picking up right where they left off instead of starting over
  • Waitlists become actionable: capacity is re-checked at every step (register, cart absorb, checkout, promote pending → active) so the system can gracefully drop an over-capacity enrollment onto the waitlist mid-flow instead of failing. Admins get a force-promote action to bypass capacity when they need to, a bump-capacity action to raise a class's cap in place, and a dedicated Waitlist Report that surfaces every waitlisted student across the studio. Tenant admins also receive an email the moment a family joins a waitlist so it's not something they discover only when the family calls to ask
  • Drop-enrollment modal rewritten around "credit, don't delete." Dropping someone from a date-specific class now defaults to adding a fully-offsetting credit entry rather than voiding the original charge — the family's ledger tells the story clearly (charged $X, credited $X on drop) instead of quietly erasing history. The checkbox shows the exact dollar amount and projected balance ("Current balance $X → new balance $Y credit") so admins can spot when the drop will leave a refundable credit behind. Drop reason is now optional for single-enrollment drops
  • Enrollment-only import: a new import mode that skips family / student creation and just posts enrollments against your existing roster. Includes a smart Resolve Classes wizard step that fuzzy-matches CSV class names to real classes in your season (with per-row overrides) so a spreadsheet from a competition-team coach can land on the correct classes without a name-match crusade. Round-trips cleanly with the enrollment CSV export so a studio can pull, edit externally, and push back
  • Class picker overhaul: a reusable browse-first component now backs Enroll in Class, Add Makeup, Add Drop-In, and Recommend Class modals. Classes are grouped into "By Season" (weekly recurring) and "By Date" (camps, intensives, workshops) with date-range labels, pre-approval classes render with an amber-dot marker instead of the full pill so the grid stays scannable, and the picker persists your last selection between saves so recording a stack of makeups doesn't mean re-searching each time. All modals share the same anchoring, open-to-current-month, and paging behavior
  • Public class schedule: added a season tab bar so multi-season studios can flip between "2025-2026 Classes" and "Competition Team" on the same page, defaults to the first active season, always shows the season's date range, an age-filter that hides catch-all + pre-approval-only classes so a parent filtering to age 7 sees actual options for a 7-year-old, and a preview-mode URL (studios generate a share link that grants a browser 24-hour access to see every season, useful for QA or spouse-testing a new season before launch)
  • Public Links section in Settings collects the four URLs every studio needs to hand out: new-family registration (/register), public schedule (/schedule), family portal login (/portal/login), and instructor portal login (/instructor/login). Every URL is built against the studio's subdomain (not the request host) so a studio browsing settings from any device still copies a production URL. Copy and Open buttons on each
  • Payment confirmation emails now fire on every successful charge (public checkout, cart, portal Make Payment, admin Add Payment) rather than just the manual admin flow. Rebuilt at render time to survive mid-recalc dispatches — the balance shown in the receipt is always what the ledger reads at send time, not a stale snapshot from the moment the job was queued. Real payment timestamp instead of midnight-of-transaction-date. Per-payment "suppress this receipt" checkbox on the admin Add Payment modal for cases where a receipt would be misleading. Two tenant-level toggles (master emails on/off and per-type send-payment-confirmations) so studios that already email families their own way can silence us cleanly
  • Day-before class reminder emails for date-specific classes: an opt-in per-class setting fires a reminder to enrolled families the day before each session. Useful for camps and workshops where a missed morning is a big deal. Nightly job walks each class's future dates, respects the reminder toggle, and stamps a sent-at timestamp so a class date only reminds once
  • Instructor portal: unified upcoming-classes list on the dashboard, roomier tiles, a monthly-calendar view for "My Schedule" (with a list toggle), private-lesson list grouped and displayed in the tenant's timezone, and instructor measurements as an independent per-tenant toggle so studios that don't do costumes can hide the whole surface
  • Season Access: per-family early enrollment grants, so a returning studio family can be given access to next season's registration before the general public. Grants live in a flyout on the classes calendar rather than a separate page
  • Classes calendar: bulk-edit multiple classes from a single modal, TBD placeholder classes (schedule day / time can now be nullable for classes still being planned), pre-approval indicator on tiles, class Actions menu flattened so Quick Add is one click instead of two, and the picker in per-class bulk edit sorts rows by day / time so the modal reads like a schedule
  • Attendance sheets: printable dated version with a per-print column picker (name / DOB / phone / emergency contact — you pick what a substitute instructor needs), whole-season variant that walks every date of the season, sort by schedule or by instructor, and location on the header. Big student name up top with family contact info wrapping on a second row so it stays legible under a printer's ink
  • Rate groups gained a classes_per_week billing unit (per-student or per-family variants) so studios that price by number of classes taken rather than hours can drop the hours-per-week gymnastics. Recalc now respects the setting end-to-end
  • Missing-phone reminder: a one-shot email + portal modal for families whose profile has no phone number on file. Excludes families that added an emergency-contact phone (they already gave you a way to reach them) and gates on the tenant lifecycle so a suspended tenant doesn't spam their families. Once dismissed or fulfilled, the family is stamped so the reminder never fires twice
  • Dashboard: Outstanding Balance now uses current-balance semantics rather than the lifetime lookahead (a September tuition charge sitting on the books doesn't inflate July's number), Studio Stats scoped to live seasons only, birthdays widget anchored to the tenant's timezone so the "today" list doesn't drift across midnight UTC, and the Recent Enrollments widget switched to a two-row layout that survives narrow screens without collapsing rows into each other
  • Tenant theming: pick a portal accent color that flows through the sidebar tint, Flux button accent, and the "presently" badge in the footer. Full-strength text on every nav item (no more low-contrast dark-mode oddities), tinted sidebar backgrounds that anchor to zinc-50 instead of white-plus-3%-alpha (that read as too-warm on some brand colors), and a softened card tint so the reduced-contrast surfaces don't get lost against the page background
  • Timezone correctness sweep across every date-writing surface: ledger writes, drop-in creation, private-lesson slot generation, birthday widgets, autopay charge cutoffs, "Current Balance as of" headers, and the day-before reminder cutoff all now anchor to the tenant's local timezone rather than UTC. Fixes a long tail of "why is this dated yesterday" reports from studios on Pacific / Mountain / Central time
  • Search (Meilisearch): per-index settings declared in one place, nightly full-reindex as a safety net, LIKE fallback always runs as a safety net so a missed sync never leaves a search stranded, and the pre-approvals + enroll-in-class pickers now use Meilisearch student search with a parent-name fallback. Soft-deleted rows filtered out of hits
  • Tenant onboarding emails: rewrote the day 1 / 3 / 7 / 10 / 14 sequence to a prose-only tone (no colored callout blocks, no gradient CTAs) that reads like a note from a person, not a marketing blast. Day-7 in particular now presents the portal-notification stack (contracts workflow, pre-approvals, real-time balances) rather than a generic "here are our features" list
  • Live Chat kill-switch: a per-tenant toggle to disable Live Chat without cancelling the add-on subscription. Useful for a studio that wants to pause it during a slow month without losing their configuration
  • Stripe Connect webhook refetches refund details from the Stripe API when the webhook payload omits them (occurs on certain older PaymentIntent shapes), so refund records land in the ledger with full detail instead of a fragment. Silent-refund option on the admin ledger for cases where a receipt would be misleading
  • Public schedule performance: killed a per-class N+1 that had a 60-class studio hitting 156 queries per page load. Now 34 queries. A 200-class studio dropped from >500 queries to under 60. Meaningful for public-schedule pages that get hit by prospective families all day
  • Tenant plan tier renaming: the entry plan is now called "Essential" instead of "Starter" so a studio with 80 real students running actual classes doesn't feel like they haven't graduated yet. Backend plan slugs, Stripe price IDs, and existing subscriptions are unchanged — display-only rename
June 2026
  • AI Assistant (MCP): connect Claude, Claude Code, or any MCP-compatible AI client directly to your studio data over a standard Model Context Protocol endpoint. Read-only for now — the AI can search families by name or email, pull a family's full profile (students, current enrollments, account balance), browse the class schedule with filters for season / day / instructor / class type, and see upcoming events. Two ways to connect from Settings → AI Assistant: paste the MCP URL into Claude.ai's custom-connector dialog and walk through the built-in OAuth sign-in (no token to manage), or generate a bearer token for CLI clients like Claude Code. Every request is scoped to the studio whose subdomain the AI connected to — data cannot leak between tenants
  • Schedule Builder gets two big upgrades: Import from another season copies every weekly class's schedules from a chosen source season into the current draft as editable placeholders — the fastest way to fork last year's grid for next year without retyping. Overlay another season renders read-only ghost tiles from a second season behind the draft's own blocks so you can plan a competition season around the regular one without flipping tabs. Both layers band each day by location: Studio A on the left, Studio B next, Unassigned last, with time-overlapping classes splitting their band further — same algorithm the published calendar's Locations view uses, so the builder and the calendar lay out the same data the same way
  • Weekly class calendar now supports multi-season selection: pick the seasons you want to see and the grid renders them combined on one weekly view. Useful when a studio runs a 2025/2026 Classes season and a Competition Classes season side-by-side — both render in the same room schedule without re-importing or merging. The season picker is a searchable checkbox dropdown rather than a native multi-select, the time column is narrower so more class detail fits, and any day with zero classes is hidden so a Tue/Wed/Thu studio doesn't waste real estate on a blank Sunday column
  • Locations view on the class calendar: pick a single day and the grid switches to per-location swimlanes so high-density schedules (six classes overlapping at 5 PM across three studios) become legible. Same time axis as the weekly view; classes inside a location split horizontally on time overlap exactly like they do on the weekly grid
  • Season-wide enrollment soft-close: each season carries an enrollment-status flag (open / waitlist-only / closed) that flows down to every class in that season. Individual classes can override either direction — a closed season can still have one open class, an open season can have one specific class waitlist-only — so studios can shut new enrollments off for the year while keeping the door open on a competition team that's still selecting
  • Classes index defaults to "all active seasons" and labels ended seasons in the picker so admins managing two-season studios don't keep landing on whichever season was selected last week and wonder where everything went
  • Family list now surfaces the student's first name when a family has only one student, and shows a badge with each family's enrolled-class count — a faster scan for the front desk than drilling into the family detail page
  • Tenant signup form is now fail-closed against bot signups: Google reCAPTCHA is verified server-side (with a clear error message if Google rejects the token), a hidden honeypot field filters traffic that fills every input, and a time-trap rejects submissions that complete the form faster than any human could. None of the three change the experience for a real owner signing up
  • Recalculate now reaches further: when a rate group changes, the job updates the due date on existing ledger entries alongside the amounts, and a season-level due_date_type setting is finally respected on import — no more billing sessions that produce charges with the right total but a wrong-by-a-month due date
  • Strip-day-time-from-class-names artisan command for studios migrating off systems that bake the meeting day and time into the class name. Matches "Ballet Adv. Tue. 6:30pm" or "Ballet Beg. Thu. 4:30pm" patterns and rewrites them to "Ballet Adv." / "Ballet Beg." so long names stop truncating in the UI. Dry-run by default; pass --apply to write. Every rename hits the activity log so any individual change can be reverted
May 2026
  • Schedule Builder: a private planning canvas where you lay out a season's weekly grid with lightweight placeholder blocks (name, day, time, instructor) before any real classes exist. Drafts don't surface to families, instructors, or reports until you promote, which can happen one block at a time or all at once. Blocks are colored by instructor to make back-to-back scheduling obvious, day labels click to expand a single day to full canvas width with every block's full detail inline, and each block can override the draft's default season for studios planning a competition and regular season on the same sheet
  • Contracts for per-student offers: studios that audition for Ballet Company or Competition Team can now build a contract once (title, body, slate of offered classes, pick-one vs pick-any, respond-by date) and send it to a list of students. Each student's family receives their own email with a unique magic-link to a mobile-friendly signing page where they check the classes they accept and type their signature. Accepted classes auto-flow into the existing pre-approval pipeline as pending enrollments, so the family doesn't need a separate "now enroll for real" step. The studio sees a status board per contract: how many sent, accepted, pending, declined, and exactly which classes each student said yes to
  • Family balances import: tenants migrating from Jackrabbit, iClassPro, or a paper spreadsheet can seed every family's existing account balance on day one without writing them by hand. The new import type matches families by email or primary contact name, parses positive balances as posted charges and negative balances as posted credits, and tags everything with an auto-created "Opening Balance" / "Opening Credit" category so migration entries can be filtered out of regular reports. Common money formats are handled: $1,250.00, (75.00), -40, plain numbers
  • Value mapping in the import wizard: when a column maps to a field with known options (status, day of week, gender, enrollment status) or a lookup target (class type, location, instructor), the wizard collects the distinct source values from the CSV and lets you pick the canonical Presently value for each one. So "Withdrawn" becomes "dropped" and "Mon" becomes "monday" without find-replacing the file in Excel first. Empty targets mean "leave as-is," which is the right default for lookups (the importer creates the missing record) and harmless for enums. The step is skipped automatically when nothing in the mapped columns needs translating
  • Automatic subscription-tier sync: a nightly job now snapshots each tenant's active-student count and reconciles their Stripe subscription against the right plan. Upgrades fire the moment the 3-month max crosses a tier so revenue tracks the real load; downgrades only fire after the 30 most-recent days have stayed entirely below the current tier, which keeps off-season dips from flipping studios back and forth. Trial tenants are kept in local sync but Stripe is never touched until they're paying for real
  • Getting Started checklist returns as a dedicated card above the dashboard grid (it had disappeared when the dashboard moved to a customizable widget layout) and the "Create a season" item now drops new tenants into a guided wizard. The wizard opens with a welcome step that diagrams how seasons, billing sessions, rate groups, and class types fit together, then walks through each piece with a worked Fall 2026 example so new owners aren't staring at a "Season Name" input wondering whether to type "2026-09" or "Fall 2026." An "I'll set things up manually" escape hatch is there for owners who already know the model
  • "How does this fit together?" link on each of the four billing-setup index pages (Seasons, Billing Sessions, Rate Groups, Class Types) opens a shared modal that explains the four-piece model: Season is the container, Billing Session is when families get charged, Rate Group is how much, Class Type maps each class to a rate group. Designed for the moment a new owner is staring at an empty index page wondering what they're supposed to do next
  • Date-specific classes (camps, workshops, intensives) now support per-date location overrides on top of a class-level default. A summer camp that runs out of the studio for four days and a park for one can be set up exactly that way, and the public schedule + the tenant schedule readout both show the resolved location per date instead of a single fallback
  • Biweekly class support: each schedule row on a class can now be set to weekly or biweekly cadence, with an A / B week selector for alternating biweekly groups. Studios can rename the two week labels (A / B, 1 / 2, "Comp / Drill", whatever your team uses) under Settings. Dashboard, room schedule, instructor schedule, and conflict detection are all biweekly-aware — A-week classes don't appear on B-week days, and two biweekly classes on opposite weeks no longer trip the same-room-and-time warning. Billing stays controlled by rate groups, with helpful nudges on the class form when a biweekly schedule is paired with a non-biweekly rate group
  • Mobile-first attendance taking: instructors and admins now get a phone-sized attendance sheet with full-width student rows, big Present / Absent toggles, inline notes that stay collapsed until needed, and a sticky save bar that survives the on-screen keyboard. Admins can launch the same modal from a Take Attendance icon on every row of the Today's Classes / Upcoming Classes lists on the tenant dashboard, so the front desk can record attendance without drilling into the class
  • New Room Schedule card on the tenant dashboard lays out today's classes as colored blocks across a per-room timeline. The hour bounds auto-fit to the earliest and latest class of the day, the timeline stretches to fill the card width, and tapping any block opens that class's attendance modal directly. Mobile collapses to a vertical list per room
  • Drop-in and makeup bookings now attach to a specific class schedule, so classes that meet twice in the same day (e.g. Monday 10am AND Monday 1pm) record which session the student attended. The date picker in both modals is bounded to the season and visually disables days the class doesn't meet, and a Session Time picker appears when the chosen date matches multiple sessions
  • Mobile responsive cleanup pass across the admin site and instructor portal: modals collapse to full-screen on phones, multi-column grids fall back to single-column on narrow widths, action button groups wrap instead of crushing against text, family detail tabs scroll horizontally on mobile, and the instructor roster has a dedicated phone card list with one-tap email / call links, full emergency contact info, and primary-contact name surfaced for every family
  • Tag selector rebuilt around a single labeled trigger, a search-or-create input, and a one-click "Create X" affordance when the search term doesn't match any existing tag. New tags get a color auto-assigned from their name so users don't have to pick one in the popover, and a "Manage tags" link in the footer takes you to the existing tags admin page for editing and deletion
  • Global search polish: the topbar trigger is now an icon button with a ⌘K hint chip instead of a fake input that opened a modal, the search input auto-focuses when the modal opens, arrow keys + Enter navigate results from anywhere inside the modal, and the keyboard-selected row uses a distinct indigo highlight so it stays visible alongside any mouse hover
  • Theme picker on the instructor and family portals now actually works (the previous implementation called a Flux Pro API that didn't exist on the installed version), and the instructor portal swapped its background pattern from falling-triangles to a softer charlie-brown weave
  • Private lessons module: instructors maintain their own per-room availability with hourly rates and slot durations, families book on a public shareable page (one URL covers every instructor), and the slot reserves the moment payment clears. Includes a separate trial-booking flow for prospective families, automatic confirmation emails to both family and instructor, family-portal self-cancellation within the studio's policy window, and a public marketing landing page
  • Per-tenant private-lesson billing configuration: choose whether bookings post to the family ledger (pay later via autopay or invoice) or require payment up front to reserve the slot, and choose whether the ledger charge is due on the booking date or on the date of the lesson
  • Email tool rewrite with a stacked audience builder that targets families, students, instructors, leads, or custom email lists with filters like enrolled-in-season, has-tag, balance-over, lead-status, and conversion state. Live recipient count, optional preview list, and a "Send test to me" button that merges placeholders against a real recipient's data
  • Email drafts and scheduled sends: save a draft with its audience config, schedule a send for a specific date and time, and the scheduler re-resolves the audience at fire time. If the recipient list has drifted from the saved snapshot, the sender is emailed a diff and (per the draft's preference) the send either proceeds anyway or pauses for review
  • Email templates V3: duplicate any system or custom template (lineage is preserved so financial-table and pre-approval behaviors follow the clone), free-text categories with grouped Compose dropdown, optional default audience per template that prefills the audience builder, archival without losing send history, and template-level send-count and last-used stats on the index
  • Per-send email reports replace the old detail view with delivered/failed/opened/open-rate cards, a per-recipient table with open timestamps and failure messages, and a resend dropdown that can target all, non-openers, or failures only
  • Outgoing email "From" name now uses the tenant's display name (or business name) instead of the platform name, so families see "Sunshine Dance Academy" rather than "Presently" in their inbox
  • Global search rebuilt as a ⌘K command palette with categorized results (families, students, classes, pages, instructors, leads), match highlighting, recent searches stored locally, and curated "Jump to" shortcuts
  • Editable display name per tenant, used in compact UI surfaces (sidebar header, public booking heroes, browser titles) while the canonical business name stays in alt text, footers, and contact cards. Lets a studio show as "SDA" in tight spaces and "Sunshine Dance Academy" everywhere else
  • Settings page restructured into four grouped sections (Studio, Operations, Experience, Integrations) covering twelve sub-sections, with a ⌘K-style search field that filters settings as you type
  • Class calendar view rebuilt with absolute-positioned class blocks driven by minute offsets so the time axis on the left actually lines up with the classes on the right, plus side-by-side columns when multiple classes overlap at the same time
  • Sales Appointments feature for studios that take discovery calls: instructors publish availability, prospects book a slot on a public page, and the booking is tracked as a lead record with status and conversion-to-family tracking. Available as an emailable audience in the new email tool
  • Internationalized address and phone inputs so non-US studios can store full state names (NSW, VIC, QLD) and international phone formats instead of the previous US-only two-character state column
April 2026
  • Public class schedule page with a shareable link and embeddable iframe snippet, branded with the studio's logo and colors. Configurable optional fields (price, enrollment count, spots remaining, capacity, age range, class type, skills, register button), per-class visibility toggle, season and day-of-week filters, list view grouped by season, and calendar view with day-of-week grid for weekly classes plus real month grids for date-specific seasons
  • Promo codes with flexible eligibility rules including minimum purchase amount, minimum upcoming enrollments across selected class types, season restrictions, validity windows, and per-family usage limits
  • Adult registration mode for studios that primarily serve adult students, streamlining the public registration flow and using "Account" terminology in place of "Family"
  • Per-season "require payment at portal checkout" setting so studios can collect upfront for short sessions and camps while keeping monthly billing for ongoing classes
  • Configurable family self-cancellation policy: disabled, allowed within a time window after enrollment, or always allowed
  • Season setup wizard with a guided four-step flow for creating new seasons and their billing sessions
  • Multi-select calendar for date-specific class scheduling, replacing the one-by-one date picker, with a same-time-for-all-dates toggle
  • Top-of-page navigation progress bar so admins get immediate feedback when switching pages
  • Refined add-to-cart animation and a more compact, collapsible promo code field on the portal checkout
  • Schedule conflict warnings on class create and edit forms when a proposed class overlaps an existing class by location or instructor, and on enrollment when a student would land in two overlapping classes (admin and family portal)
  • Schedule exceptions for one-off rehearsals and tech week dates: layer extra meetings on top of a weekly-series class, with optional flat charges per family or per student. Visible in the family portal, the instructor schedule and dashboard, and the admin Schedule tab on the class detail pane
January 2026
  • Platform Launch feature for sending welcome emails to all families with secure password setup links
  • Multi-language support with Spanish translations for all portals
  • In-app support form for contacting Presently directly
  • Soft delete recovery for students, families, and classes with 60-day restoration window
  • User-friendly payment decline messages with activity log tracking for better billing transparency
December 2025
  • Twilio SMS integration for tenant messaging to families
  • Signed waiver PDF viewing and download with signature display
  • Waivers tab on family and student detail pages
  • Tab badge counts now visible before clicking (Notes, Costumes, Waivers)
  • Billing Overrides and Payment Plans moved to Actions menu modals
  • Added technology and changelog page
  • Expanded landing page features section with 25+ capabilities
  • New custom 404 and 500 error pages with brand styling
  • Added registration link to family portal login
  • Mobile-friendly improvements across dashboard and index pages
November 2025
  • Stripe subscription billing integration with Laravel Cashier
  • Add-on subscriptions for Events, Costumes, and Live Chat
  • Pre-approval email templates with multi-season support
  • Flexible tagging system for students and families
  • Redis caching for dramatically improved performance
  • PostHog analytics integration
  • Activity log and audit trail for all data changes
  • Credit card surcharge setting for payment processing
  • Standard email templates (invoices, confirmations, etc.)
October 2025
  • Pre-approval system for class enrollment
  • Bulk copy pre-approvals between classes
  • Drop all students modal with proration support
  • Background job progress notifications
  • Rate group recalculation for imported data
  • Email communications with placeholder system
  • Comprehensive test suite with factories
Coming Soon
  • Automated billing runs
  • Enhanced reporting dashboard
  • Mobile app for instructors
  • SMS notifications

Ready to experience the difference?

Join studios who trust Presently to run their business.

Start Your Free Trial