Full installation and studio management guide for ReservePress Studio (v1.0.1) — tailored for tattoo shops, piercing studios, and body art collectives with artist portfolios, custom session deposits, aftercare add-ons, and Front Desk walk-in tracking.
Before installing ReservePress Studio, confirm your server meets the following requirements: Requirement
Minimum
WordPress
PHP
MySQL / MariaDB
MySQL 5.7+ or MariaDB 10.3+
HTTPS
Required for Stripe payments (strongly recommended for all installs)
Pretty Permalinks
Must be enabled — Settings → Permalinks → any option except Plain
WP Memory Limit
128 MB minimum; 256 MB recommended
Optional: Stripe Account
Required only if you want to collect online payments or deposits. Not required for pay-in-studio (cash/card on arrival) workflows.
/wp-content/plugins/ via FTP or your host's file manager.The plugin automatically creates 9 custom database tables prefixed with wp_rpstudio_ (or your configured prefix). Three pages are created automatically: Book an Appointment (slug: book), My Appointments, and Front Desk. Custom capabilities are added to the Administrator role. No existing WordPress data is modified.
wp_rpstudio_serviceswp_rpstudio_service_categorieswp_rpstudio_staffwp_rpstudio_staff_hourswp_rpstudio_staff_blockedwp_rpstudio_appointmentswp_rpstudio_clientswp_rpstudio_addonswp_rpstudio_appointment_addonswp_rpstudio_promotionsFollow these steps in order after activating the plugin. Completing each step before the next ensures the booking widget works correctly from day one.
Go to RP Studio → Settings. The Settings screen is organised into tabs — open the Studio tab first and fill in:
Go to RP Studio → Services and click Add New Category. Categories group your services in the booking widget (e.g. Traditional, Realism, Blackwork, Fine Line). This step is optional — you can add services without categories.
Go to RP Studio → Services → Add New Service. Fill in:
At least one active service must exist before the booking widget will load correctly. Services with Status set to Inactive are hidden from the public but remain in the database.
Go to RP Studio → Artists → Add New Artist. Fill in:
Go to RP Studio → Artists, click an artist's name, then click Set Hours. Configure working days and time ranges for each day of the week. The booking widget only shows available slots within these hours.
Artists with no hours configured will show no available slots in the booking widget. Hours apply to the artist's local timezone as configured in WordPress Settings → General.
ReservePress Studio automatically creates three pages on activation. Confirm they exist in WordPress → Pages and that their slugs match exactly.
Page Title
Slug
Content / Notes
Book an Appointment
book
Contains [rpstudio_booking] shortcode automatically. This is your main booking page.
My Appointments
my-appointments
Contains [rpstudio_my_appointments] shortcode. Clients view and manage their bookings here.
Front Desk
front-desk
Staff-facing interface. No shortcode needed — the plugin handles this page directly.
After confirming the pages, go to RP Studio → Settings → Studio and confirm the My Appointments URL field is set correctly.
All shortcodes can be added to any WordPress page, post, or widget area. They automatically enqueue the required CSS and JavaScript. No additional setup is needed beyond placing the shortcode in your content.
The plugin registers both rpstudio_ and rpstudio_ prefixes for all shortcodes. Either prefix works identically. The rpstudio_ prefix is recommended for new installs.
[rpstudio_booking]
[rpstudio_booking service_id="3"]
[rpstudio_booking staff_id="2" title="Book with Alex"]
The primary booking shortcode. Renders a fully interactive 6-step booking flow:
Attribute
Default
Description
service_id
0
Pre-select a service by ID. Widget skips Step 1 if set.
staff_id
0
Pre-select an artist by ID. Widget skips Step 2 if set.
title
Book an Appointment
Heading displayed at the top of the widget.
[rpstudio_services]
[rpstudio_services columns="2" category_id="1"]
[rpstudio_services show_price="false" show_book_button="true"]
Displays a responsive grid of active services with name, price, description, and a Book a Session button. Attribute
Default
Description
category_id
0
Filter by service category ID. Shows all categories if omitted.
columns
3
Number of columns in the grid (1–4).
show_price
true
Show or hide the service price.
show_book_button
true
Show or hide the Book a Session button.
[rpstudio_service id="5"]
Displays a single service by its ID — name, description, duration, and price. Useful for dedicated service landing pages.
Attribute
Default
Description
id
0 (required)
The ID of the service to display. Find IDs in RP Studio → Services.
[rpstudio_staff]
[rpstudio_staff columns="4"]
Displays all active artists in a grid with photo, name, title, bio, and a Book with Me button. Attribute
Default
Description
columns
3
Number of columns in the grid.
[rpstudio_my_appointments]
Displays a client's appointment history. Behaviour depends on login status:
This shortcode is placed on the My Appointments page automatically on activation. Confirm the page URL is saved in RP Studio → Settings → Studio. Without this, the confirmation email's View My Appointments link will not work.
[rpstudio_promotions]
Displays all currently active promotions with their discount code, description, and validity. Promotion codes can be entered by clients during the booking checkout step.
[rpstudio_availability_calendar service_id="1"]
[rpstudio_availability_calendar service_id="1" staff_id="2"]
Displays a read-only month calendar highlighting available dates for a given service and optionally a specific artist. Useful on service or artist landing pages.
Attribute
Default
Description
service_id
0 (required)
The service to check availability for.
staff_id
0
Optionally restrict to a specific artist.
The RP Studio menu appears in the WordPress admin sidebar (look for the needle icon). It contains the following sections:
This screen lists all services and categories. All management uses full-page forms. Services list
This screen lists all artists. All management uses full-page forms.
[rpstudio_promotions] shortcode.Addons are optional extras clients can add to their booking at checkout — for example, aftercare kits, reference prints, or touch-up sessions.
All settings are at RP Studio → Settings. The settings screen is divided into seven tabs. Each tab saves independently — click Save Settings within each tab.
Setting
Description
rpstudio_studio_name
Your studio name — appears in email notifications and the booking widget.
rpstudio_studio_email
Reply-to email address for all client-facing emails.
rpstudio_studio_phone
Studio phone number — included in confirmation emails.
rpstudio_theme_style
auto = inherit active theme CSS variables. off = always use plugin default colours.
rpstudio_my_appts_url
Full URL of the My Appointments page. Required for email confirmation links.
Setting
Description
rpstudio_min_advance_hours
Minimum hours in advance a client can book. Default: 2.
rpstudio_max_advance_days
How far ahead clients can book. Default: 60 days.
rpstudio_slot_interval
Interval between time slots shown in the widget. Default: 15 minutes.
rpstudio_cancellation_hour s
Hours of notice required for cancellation. Default: 24.
rpstudio_allow_guest_booki ng
Allow bookings without a WordPress account. Recommended: on.
rpstudio_require_phone
Make the phone field required at checkout.
Setting
Description
rpstudio_gratuity_enabled
Show a gratuity/tip selector at checkout. Only available when Stripe is enabled. Default: on.
rpstudio_gratuity_presets
Comma-separated tip percentages shown as quick-select buttons. Default: 15,18,20.
rpstudio_gratuity_default
Pre-selected tip percentage. Leave blank for none.
Setting
Description
rpstudio_payment_mode
full = charge full amount at booking. deposit = charge deposit only. none = pay in studio.
rpstudio_stripe_enabled
Enable Stripe payment processing.
rpstudio_stripe_test_mode
on = use test API keys. off = use live keys.
rpstudio_stripe_pub_key_li ve
Stripe live publishable key (starts with pk_live_).
rpstudio_stripe_secret_liv e
Stripe live secret key (starts with sk_live_). Never share this key.
rpstudio_stripe_pub_key_te st
Stripe test publishable key (starts with pk_test_).
rpstudio_stripe_secret_tes t
Stripe test secret key (starts with sk_test_).
rpstudio_stripe_webhook_se cret
Stripe webhook signing secret (starts with whsec_). Required for payment confirmation.
Setting
Description
rpstudio_tax_enabled
Apply tax to service prices at checkout.
rpstudio_tax_rate
Tax percentage (e.g. 13 for 13% HST).
rpstudio_tax_name
Label shown at checkout (e.g. HST, GST, VAT).
rpstudio_tax_inclusive
on = prices already include tax. off = tax added on top.
Setting
Description
rpstudio_currency
ISO currency code. Default: CAD.
rpstudio_currency_symbol
Symbol displayed with prices. Default: $.
rpstudio_currency_position
before = $10.00. after = 10.00$.
rpstudio_currency_decimals
Number of decimal places. Default: 2.
Setting
Description
rpstudio_email_from_name
Sender name for all plugin emails.
rpstudio_email_from_addres s
Sender email address.
rpstudio_email_confirmatio n
Send a confirmation email to the client after booking.
rpstudio_email_reminder
Send a reminder email before the appointment.
rpstudio_email_reminder_ho urs
Hours before the appointment to send the reminder. Default: 24.
rpstudio_email_cancellatio n
Send a cancellation notice to the client.
rpstudio_smtp_host
SMTP server hostname (e.g. smtp.sendgrid.net).
rpstudio_smtp_port
SMTP port. Common values: 587 (TLS), 465 (SSL).
rpstudio_smtp_username
SMTP account username.
rpstudio_smtp_password
SMTP account password.
rpstudio_smtp_encryption
tls or ssl.
WordPress default email (wp_mail) is often blocked by hosting providers. Use a transactional email service such as SendGrid, Mailgun, or Postmark for reliable delivery. Enter the SMTP credentials in the fields above, or use a dedicated SMTP plugin if preferred.
ReservePress Studio adds custom capabilities to the WordPress role system. Administrators receive all capabilities automatically on activation. You can assign individual capabilities to other roles using a role management plugin such as User Role Editor.
Capability
Description
Admin
Manager*
Recept.*
manage_rpstudio_appointments
View, create, edit appointments
✓
✓
✓
edit_rpstudio_appointments
Edit existing appointments
✓
✓
✓
delete_rpstudio_appointments
Delete appointments
✓
✓
manage_rpstudio_services
Manage services and categories
✓
✓
edit_rpstudio_services
Edit service details
✓
✓
manage_rpstudio_staff
Manage artists and hours
✓
✓
manage_rpstudio_settings
Access plugin settings
✓
✓
view_rpstudio_reports
View revenue and booking reports
✓
✓
view_rpstudio_calendar
View the calendar screen
✓
✓
✓
access_rpstudio_frontend
Access the Front Desk interface
✓
✓
✓
* Manager and Receptionist are not created automatically. Assign capabilities to existing roles using a role editor plugin.
The Front Desk is a dedicated interface designed for in-studio use — reception tablets, front desk computers, or any staff-facing screen. It is separate from the WordPress admin. A Front Desk page is created automatically on activation and is accessible at: https://yoursite.com/front-desk/
The interface includes:
The Front Desk interface requires the access_rpstudio_frontend capability. Administrators have this by default. Assign it to receptionist or manager roles as needed.
The plugin sends the following emails automatically. All emails are sent via the SMTP settings configured in RP Studio → Settings → Email.
Trigger
Recipient
Booking Confirmation
Immediately after a successful booking
Client
Admin Notification
Immediately after a successful booking
Studio admin email
Appointment Reminder
N hours before the appointment (configurable)
Client
Cancellation Notice
When an appointment is cancelled
Client
Reminder emails require a WP-Cron job to fire. On most shared hosts this works automatically. For high-traffic or mission-critical reminders, configure a real cron job on your server: */5 * * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null
Step 1: Create a Stripe Account
Go to stripe.com and create or log in to your account. Complete business verification if required for live payments.
Step 2: Get Your API Keys
In the Stripe dashboard, go to Developers → API Keys. Copy your Publishable key and Secret key. Start with test mode keys (pk_test_… and sk_test_…) for initial setup.
Step 3: Enter Keys in Plugin Settings
Go to RP Studio → Settings → Payments. Enable Stripe and check Test Mode. Paste your test keys into the Test Publishable Key and Test Secret Key fields. Save settings.
Step 4: Set Up Webhook
In Stripe dashboard go to Developers → Webhooks → Add Endpoint. Endpoint URL: https://yoursite.com/wp-json/rpsal/v1/stripe-webhook. Select events: payment_intent.succeeded and payment_intent.payment_failed. Copy the Signing Secret and paste it into the Stripe Webhook Secret field in plugin settings.
Step 5: Test a Payment
Make a test booking on your site. Use Stripe test card 4242 4242 4242 4242 with any future expiry and any CVC. Confirm the booking appears in RP Studio → Appointments with payment status Paid. When ready for live payments, switch off Test Mode and replace with live API keys.
Never paste your Stripe secret key anywhere public or in version control. The webhook secret prevents fraudulent payment confirmation requests. HTTPS is required for Stripe to function on live sites.
The ReservePress Studio Theme is the official companion theme for ReservePress Studio. It is designed to work out of the box with the plugin — no manual shortcode setup required for the Booking or Services pages.
Page Title
Slug
Template
Home (set as front page)
/
Front Page
Services
services
Services Page
Artists
artists
Artists Page
Gallery
gallery
Gallery Page
Contact
contact
Contact Page
Book an Appointment
book
Booking Page
Go to Appearance → Customize to access all theme options, including studio name, tagline, hero content, colour palette, typography, and footer details.
ReservePress Studio Theme Lite is a minimal booking shell included free with every ReservePress Studio purchase. It is designed for studios whose main website runs on a non-WordPress platform such as Shopify, Squarespace, or Wix — where you need a clean, branded booking experience without building a full WordPress site.
Install WordPress in a subfolder of your domain (e.g. yourdomain.com/book/). Theme Lite turns that subfolder into a self-contained booking portal — nothing more. Visitors who land on your booking URL see only the booking form and an appointments page. The header shows your logo, which links back to your main site.
Go to Appearance → Customize. Theme Lite exposes four options only: Option
Description
Logo
Upload your studio logo. Displayed in the header, links back to your main site.
Primary Colour
Accent colour applied to buttons and highlights in the booking widget.
Main Site URL
The URL your logo links to (e.g. https://yourdomain.com).
Footer Copyright
Copyright line displayed in the footer.
Theme Lite has no navigation menu, no homepage, and no marketing content. It is intentionally minimal — a booking shell only. For a full studio website with a homepage, services page, artist profiles, and gallery, use the ReservePress Studio Theme (Chapter 11).
Booking widget shows “Online booking is coming soon”
[rpstudio_booking] (not [rpstudio_booking_widget]).Services page shows “No services found”
[rpstudio_services] is placed in the page content.For additional help, feature requests, or to report a bug, visit reservepress.ca or contact us at hello@reservepress.ca.
ReservePress Studio is open source software licensed under the GNU General Public License v2 or later.