Harbor Lane Bikes
How the shop's website, bookings and email are set up, who can get into what, and what to do if something stops working.
What this covers
This pack covers the things customers see online and the shop's email. It doesn't cover the till or the accounting software, which are looked after by their own suppliers.
Covered
- The website, harborlanebikes.example
- The online repair booking form
- Shop email (3 mailboxes)
- The domain name and its renewal
Not covered
- The till and card machine
- Accounting software
- Social media accounts
- Staff laptops and phones
- Site
- WordPress 6.6.2 · child theme "hlb-child" of a commercial block theme
- Runtime
- PHP 8.2 · MariaDB 10.11 · nginx 1.24
- Server
- Brightline managed VPS · Ubuntu 24.04 LTS · 2 vCPU / 4 GB · IP 203.0.113.24
- Bookings
- SlotBook (hosted) embedded via iframe on /book · webhook to shop inbox only
- Key plugins
- UpdraftPlus · Redirection · a caching plugin · a forms plugin (contact page)
- Source
- No git repository. Theme changes are made on the server by Sam. See risk 3.
Who owns what
Every account should belong to the business, with at least two people able to get in. This table shows how things stand today.
| Account | Owner | Also has access | Login kept in |
|---|---|---|---|
| Domain name | Maya Torres | Nobody else | Shop password manager |
| Website hosting | Harbor Lane Bikes | Sam Okafor | Shop password manager |
| Website admin | Maya Torres | Sam Okafor, Leo (staff) | Each person's own login |
| Booking system | Maya Torres | Sam Okafor | Shop password manager |
| Harbor Lane Bikes | Sam Okafor | Shop password manager |
We never write passwords in this pack. The shop keeps them in a shared password manager that Maya and Sam can both open.
| Service | Provider | Admin users | 2FA |
|---|---|---|---|
| Registrar | NameHarbor | maya@ | on (app) |
| DNS | Cloudflare (free) | maya@, sam@ | on |
| Hosting panel | Brightline | billing: maya@ · tech: sam@ | on |
| SSH | server | user "deploy", key-only, key held by Sam | n/a |
| WP admin | site | maya, sam, leo (editor) | 1 of 3 off (leo) |
| Workspace-style suite | admin: maya@, sam@ | on |
# Current DNS (Cloudflare) · harborlanebikes.example @ A 203.0.113.24 proxied www CNAME harborlanebikes.example proxied @ MX 1 mx1.mail-provider.example @ TXT "v=spf1 include:_spf.mail-provider.example ~all" sel1._domainkey TXT "v=DKIM1; k=rsa; p=…" _dmarc TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
Backups
The website is copied automatically every night, and a second copy goes somewhere else once a week. Somebody last checked that a backup actually works on 4 March 2026. It took 25 minutes to restore.
| What | How often | Kept for | Where |
|---|---|---|---|
| Whole website | Every night | 30 days | Brightline Hosting |
| Website copy | Every Sunday | 12 weeks | Separate cloud storage |
| Bookings | Handled by SlotBook | SlotBook's own policy | SlotBook |
| Not backed up separately See risk 4. | |||
- Nightly
- Brightline VPS snapshot · 02:00 server time · 30 retained · panel → Server → Snapshots
- Weekly off-site
- UpdraftPlus · Sun 03:00 · DB + wp-content/uploads + themes + plugins → S3-compatible bucket "hlb-backups" · 12 retained
- Excluded
- wp-content/cache, node_modules, *.log
- Bucket access
- Write-only key on the server; read key in the shop password manager
- Last restore test
- 2026-03-04 · snapshot → staging VPS · site and /book checked · 25 min
Getting things back
Open the situation that matches what's happening. Each one is written so that whoever is on hand can follow it.
The website won't load +
- Check it on your phone with Wi-Fi off. If it loads, it's your internet, not the website.
- Message Sam with what you see, or forward our alert.
- No reply in 2 hours: call Brightline Hosting and ask them to restore last night's backup.
- When it's back, open the booking page and make a test booking, then cancel it.
# 1. Check origin vs Cloudflare curl -sI https://harborlanebikes.example/ | head -1 curl -sI --resolve harborlanebikes.example:443:203.0.113.24 https://harborlanebikes.example/ | head -1 # 2. On the server (ssh [email protected]) sudo systemctl status nginx php8.2-fpm mariadb sudo tail -n 50 /var/log/nginx/error.log # 3. Full restore: Brightline panel → Snapshots → last good → Restore # or partial DB restore from the off-site copy: wp db export pre-restore.sql wp db import /tmp/hlb-db-YYYY-MM-DD.sql wp cache flush
Targets agreed with the owner: back within 4 hours, lose no more than one day of changes.
Nobody can get into the email +
- Try logging in from a different device. If only one person is locked out, Maya or Sam can reset their login from the admin page.
- If nobody can log in, Sam contacts the email provider's support.
- Meanwhile, tell regular customers to phone the shop.
We got a "domain about to expire" email +
- Don't click links in the email. Some of these are scams.
- Maya logs in to NameHarbor directly and checks the renewal date.
- If it's real, renew it. Auto-renew is switched on, but the card on file expires in November 2026. See risk 1.
Monitoring
We check the website every five minutes. One failed check is ignored, because websites hiccup. Two in a row sends an alert to Maya and Sam. When it's working again, they get a second message.
What we check
- The home page loads properly
- How quickly it answers
What we don't check yet
- Whether a booking goes through
- Email delivery
- Whether backups ran
- Check
- HTTPS HEAD https://harborlanebikes.example/ · every 5 min · 10 s timeout · no redirects followed
- Healthy
- HTTP 200
- Down
- 2 consecutive failures (non-200, timeout or connection error)
- Delivery
- Webhook → Slack #hlb-alerts + email · queued and retried until confirmed
# Example alert payload (tlf.alert.v1)
{
"event": "down",
"client": { "id": "harbor-lane-bikes", "name": "Harbor Lane Bikes", "timezone": "shop's local zone" },
"check": { "type": "website", "target": "https://harborlanebikes.example/" },
"observation": { "http_status": 503, "consecutive_failures": 2 },
"occurred_at": "2026-10-14T12:10:00Z"
}
Who to call
Go down the list in order. Phone numbers are in the shop password manager under "Contacts".
- Sam Okafor · web developerBuilt the website. Can fix almost anything on it, restore backups and change email settings.Weekdays
08:00–18:00 - Brightline Hosting · supportCan restart the server and restore backups. Can't change the website itself.24 hours
every day - The Logic LabWe can help you work out what's wrong and who to call. We don't change your website ourselves.Weekdays
- Brightline account
- Account ID in password manager · priority support tier · open tickets via panel or phone
- Cloudflare
- Free plan, community support only. Pause proxy via dashboard if the origin is suspected.
- SlotBook
- Status page + email support · iframe embed has no server-side dependency
Risks we found
These are the things that worried us. None of them are emergencies today, but the first two could cause real trouble if left.
- Fix soonOnly Maya can get into the domain account, and the card on file expires in November.If the renewal fails while Maya is away, the website and email could stop working.
- Fix soonOne staff login to the website has no second security step.If Leo's password leaked, someone could change the website.
- Worth fixingOnly Sam knows how the website's design was changed.There's no saved history of his changes, so another developer would be starting partly blind.
- Worth fixingEmail isn't backed up separately.Deleted emails can only be recovered for a limited time through the email provider.
- NoteNobody is sure who set up the email security records.We've asked Sam. Until we hear back, this stays marked as a gap.
| Finding | Detail | Suggested fix |
|---|---|---|
| Registrar single admin | no secondary contact · card exp 11/2026 | add sam@ as tech contact · update card |
| WP user without 2FA | leo (editor) | enforce 2FA for all roles |
| No version control | theme edits made live over SSH | init git repo for hlb-child, deploy from repo |
| DMARC p=none | spoofed mail not rejected | review rua reports, move to quarantine |
| PHP 8.2 | security support ends Dec 2026 | test and move to 8.3 |
| Stale plugin | forms plugin: no update in 26 months | replace or remove |
What to fix next
In this order. Tick them off as you go. The boxes work on screen, and they print blank if you'd rather use paper.
- Maya · by 30 Nov
- Sam · by 30 Nov
- Sam · by Jan
- Maya · by Jan
- Sam · March 2027