SB Shane Barron Start a ticket

Add-ons

Name the extras.
Do not hide them in a paragraph.

A “contact form” and a “client portal with files and roles” are not the same sentence. These are the add-ons I actually build. Check them on the ticket. Shop weight moves. The dollar figure still comes from me.

Stamp them on a ticket

Talk

Talk

Serious contact form

Not a mailto link. Fields that match the job, spam trap, the message lands in your inbox and a log.

WordPress. Custom fields, honeypot, mail to you, stored copy so a spam filter cannot eat a lead.

Laravel. Same, plus it can open a job in the system instead of only emailing.

Add to ticket

Booking / calendar

Public scheduling with your rules. Confirmations, cancel links, the calendar is yours.

WordPress. Plugin if the rules are ordinary. I theme it so it does not look like a widget from 2018.

Laravel. Custom calendar when the rules are the business. I already ship a self-hosted booking tool if the fit is close.

Add to ticket

Newsletter hook

Collect addresses into a list you own (or Mailchimp, if that is already the list). No dark patterns.

WordPress. A form that does one thing.

Laravel. Same, or members are already the list.

Add to ticket

Money

Money

Payments

Stripe or Square. One-time, deposits, or invoices. You already have a merchant account — I will not invent a processor.

WordPress. Woo or a tight Stripe/Square plugin. No mystery gateways.

Laravel. Stripe or Square in the app, receipts, an audit trail.

Add to ticket

Subscriptions

Recurring plans, failed payments, customer portal to update a card. Recurring is where amateur checkout dies.

WordPress. Woo subscriptions or MemberPress. Ceiling included in the quote so you are not surprised later.

Laravel. Stripe Billing, plans as data, dunning you can actually see.

Add to ticket

Giving / donations

Embed or native giving. Funds, receipts, the processor you already use.

WordPress. Embed the provider, or a simple native form if the provider allows it.

Laravel. Native if giving sits inside membership. Otherwise embed — do not rebuild Finance.

Add to ticket

People

People

Client / member logins

People sign in. Passwords, reset, roles. A public site with a secret page is not this.

WordPress. WordPress users + roles, locked down so subscribers cannot see the kitchen.

Laravel. First-class auth. This is the default, not an add-on, on portals and apps — I still want it named.

Add to ticket

Staff roles

More than owner and visitor. Editor vs billing vs field vs admin.

WordPress. Custom roles. I will not hand every staff member administrator.

Laravel. Policies on the actual objects. Named in the ticket.

Add to ticket

Content

Content

Two or more languages

Real locales, not Google Translate glued to the corner. URLs, metadata, a way to keep translations in sync.

WordPress. A professional multilingual plugin, not a widget. Content team has to actually translate.

Laravel. Locale in the app, translated strings and content. Heavier if every record has two lives.

Add to ticket

Journal / news

Posts on a cadence. Skip if you will not write.

WordPress. Native. The theme has to treat the index as a designed page.

Laravel. A small editorial module, or I put WordPress next to the app. I will say which.

Add to ticket

Maps / locations

One pin, or many. Store locators have their own UX. API keys are yours.

WordPress. A map that does not trap the address as a screenshot.

Laravel. Geo queries if “near me” is a filter, not a decoration.

Add to ticket

Ops

Ops

File exchange

Clients upload and download without a shared Drive. Permissions, trash, a log.

WordPress. Possible, ugly at scale. Fine for a few PDFs per user.

Laravel. This is a native job. I already ship a self-hosted file harbor if the fit is close.

Add to ticket

Transactional email

Receipts, resets, “your thing changed.” Not a newsletter blast tool unless you say so.

WordPress. Reliable mail, branded templates, not “WordPress <wordpress@localhost>”.

Laravel. Queued mail, templates, logs.

Add to ticket

SMS reminders

Opt-in texts for bookings or status. Carriers and consent are real law. I will not spray.

WordPress. Through a provider. Keep it to reminders you can defend.

Laravel. Same provider, wired to the actual events in the app.

Add to ticket

Lead pipeline

Leads, stages, notes. Not Salesforce. The pipe you will actually look at.

WordPress. A tight CRM plugin or a Laravel sidecar. I will not duct-tape HubSpot forms to a prayer.

Laravel. A small pipeline on the same database as the work. This is usually better than a third CRM.

Add to ticket

Inventory

Counts, SKUs, the number on the site matches the shelf — or I do not pretend.

WordPress. Woo inventory if it is simple. I will not fake a warehouse.

Laravel. When the count is a business rule (lots, serials, locations).

Add to ticket

Integrations / API

Talk to Square, QuickBooks, a legacy DB, a partner. Named systems only — “and it syncs” is not a spec.

WordPress. Webhooks and official plugins where they are not junk. Custom when they are.

Laravel. This is Laravel’s home turf. Each integration is a line on the ticket.

Add to ticket

Launch

Launch

Content migration

Bring the old site with you. URLs that must not die. Redirects. I need a crawl, not a vibe.

WordPress. Pages, posts, media, the redirects Google already knows.

Laravel. Data model mapping. Harder, honest in the quote.

Add to ticket

SEO pass

Titles, schema, sitemap, share cards, performance that is not an insult. Not “we will rank #1”.

WordPress. In the theme, not a 40-module SEO plugin with ads.

Laravel. Same discipline, built in.

Add to ticket

Accessibility pass

Keyboard, contrast, names on controls, reduced motion. A real pass, not a badge.

WordPress. Theme-level. Forms and menus included.

Laravel. Same. Especially on apps, where people live all day.

Add to ticket

Hosting / care

I can host it. Updates, backups, the lights stay on. Or I hand you a box you control.

WordPress. Managed WordPress on a real server, not a $3 coupon host.

Laravel. Same metal, PHP, queue, backups. Your domain.

Add to ticket