# Features — everspace (Everyspace)

Evidence date: 2026-10-15.

Source: `master` at `c784099` (2025-11-05). Package name `filmspace-meteor_react`. Public name Everyspace.

Git history on this remote is three commits (2022-08-30 and 2025-11-05). Feature age is taken from code and from README notes, not from a per-feature commit log.

Status labels:

- **Current** — reachable in the running route or method set.
- **Completed (historical note)** — named in README as a 2021 user story. The code still contains a related behaviour. The original ticket is not in git.
- **In development** — none identified. No feature flag or branch in this checkout shows unfinished product work beyond commented routes.
- **Planned / not wired** — present as comments or unused entry points.
- **Removed from the router** — route code is commented out.

## Current features

### Public site

| Feature | Where | Status |
|---|---|---|
| Landing page | `/` → `EveryspaceLandingPage` | Current |
| Location search with map centre | `/search/:page?`, `listings.search` | Current |
| Listing detail and Open Graph | `/filmspace-detail/:listingId` | Current |
| Featured listings (max 6, active and published) | publication `FeaturedListings` | Current |
| Legal: Terms of Use, Acceptable Use, Privacy Policy, Terms of Service | `/legal` | Current |
| Contact us | `/contact` | Current |
| Sexual harassment policy page | `/testing` (no auth) | Current route. **Requires confirmation** that a public `/testing` URL is intended |
| Dev landing duplicate | `/dev-test` | Current route, admin check commented out |

### Accounts

| Feature | Where | Status |
|---|---|---|
| Register / create account | `/create-account`, `/register` | Current |
| Login, remembered login, login as someone else | `/login`, `localStorage Meteor.rememberMe` | Current |
| Google and Facebook login | `accounts-google`, `accounts-facebook` | Current |
| Email verification | `/verify-email/:token`, `/verify-your-email` | Current |
| Mobile verification | `/verify-mobile/:token`, method `verifyMobile` | Current |
| Password reset and change | `/request-reset-password`, `/reset-password/:token/:userId`, `/dashboard/account-settings/password-change` | Current |
| reCAPTCHA on account schema | `recaptcha` field, `recaptchaVerify` | Current |
| Ban flag blocks login | `Accounts.validateLoginAttempt` | Current |
| Newsletter row on signup; subscribe / unsubscribe methods | `newsletter` collection | Current |
| Profile | `/dashboard/profile` | Current |
| Filmmaker / host acting mode | `userActingAs` | Current |
| Host role toggle | `toggleUserIsHost` | Current. Caller check not present in the method |

### Listings

| Feature | Where | Status |
|---|---|---|
| Create listing | `/listing/create`, `listing.create` | Current |
| Address with Google map; delete if left empty | `ListingAddress` | Current |
| Category and subcategory | Residential, Commercial, Studio, Mobile | Current |
| Detail, style, parking, amenities, restrictions, photos, rules, calendar, activities, pricing, additional fees | `imports/routes/listings/forms.jsx` and `imports/ui/pages/listings/forms` | Current |
| Per-category form selection | `forms_for_categories`, admin `/admin/listing-forms` | Current |
| Photo add/remove and watermarked download | `listing.photo.add`, `listing.photo.remove`, `listings.getWatermarkedImageUrl` | Current. Matches README US-5 (file download / image) as **Completed (historical note)** plus still current |
| Statuses inactive, in-review, active | `listing.status.set`, host dashboard filters | Current |
| Admin approve / decline | admin status change and Intercom events | Current |
| Admin featured flag and sort rating | `listing.toggleIsFeatured`, `listings.setSortRating` | Current |
| Admin change request to the host | `change_requests`, `admin.listing.sendChangeRequest` | Current |
| Favourites and a note on a favourite | `/dashboard/favourites`, `user.toggleListingFavourited`, `user.favourite.note.update` | Current |
| Space tags | `spaces_tags`, `/admin/spaces-tags`, search argument `spaceTagId` | Current. README US-2 |
| Search locations (polygon, centre, public, landing) | `locations`, `/admin/locations` | Current. README US-3 names CPT, JHB, DRB, GR. Those four areas are not hardcoded; they would be location documents. **Requires confirmation** that those documents exist in the database |

### Bookings and money

| Feature | Where | Status |
|---|---|---|
| Booking request from a listing | `bookings.create` | Current |
| Server-side price, hours, discount, additional fees, service fees | `PricingService` | Current |
| Early-bird waiver of the filmmaker service fee | `promotionDiscount` set to the full filmmaker fee on every create | Current. README US-8 "Zero Service Fees". **Requires confirmation** that it should still apply to every booking |
| Peach pre-authorisation, capture, reversal, refund | `PeachPaymentsService` | Current |
| Stored cards (registration ids) | `profile.cards` | Current |
| 3-day host approval and 24-hour reminder | job queue | Current |
| Host accept, decline, cancel | `bookings.hostAccept`, `hostDecline`, `hostCancel` | Current |
| Filmmaker cancel with a 48-hour rule | `bookings.filmmakerCancel` | Current |
| Overlap lookup for other pending requests | `bookings.findOverlappingBookingRequests` | Current. Does not by itself reject the booking |
| Custom rate on a message thread | `Messaging.createCustomFee` | Current. Related to README US-4 "Back-end user content override" only by inference |
| Upcoming, past, cancelled, and request lists | `/dashboard/bookings/*` | Current |
| Completion when the end job runs | `bookings.onBookingEndTime` | Current |
| 48-hour-before reminder email when start is more than 96 hours away | `bookings.48hourReminder` | Current |
| Host payout bank account | `user.addPayoutMethod` and related | Current |
| Admin "payout made" flag | `booking.setPayoutMade` | Current |
| Receipt, VAT invoice, booking agreement PDF | Puppeteer / document methods and routes | Current |
| Minimum-hours check on timeslots | `TimeslotSchema` and custom-fee schema | Current. README US-6 tooltip is a UI note; the schema enforces a minimum against the chosen crew size hours |

### Communication and trust

| Feature | Where | Status |
|---|---|---|
| Message inbox, thread, archive | `/dashboard/messages` | Current. README US-7 and US-11 |
| Email templates | `private/email-templates` | Current |
| SMS via Twilio | `sendSMS` | Current |
| In-app chat preference `send_chat_messages_to_cellphone` | `SettingsSchema` | Current |
| Intercom events and messenger update | `EveryspaceIntercomClient`, router | Current. README US-12 |
| ActiveCampaign contact updates | `imports/api/ActiveCampaign` | Current |
| Listing reviews, user reviews, website reviews | `imports/api/Reviews` | Current |
| User feedback email | `user.sendFeedbackEmail` | Current. README US-9 |
| Google Tag Manager and Facebook page views | `router.js` | Current |

### Admin

| Feature | Where | Status |
|---|---|---|
| Admin shell | `/admin/*`, role `admin` | Current |
| User admin and a global settings writer | `AdminUsersPage`, `users.all.settings.set` | Current |
| Booking admin | `AdminBookingsPage` | Current |
| Delete all watermarked images | `admin.deleteAllWatermarkedImages` | Current |

### Platform

| Feature | Where | Status |
|---|---|---|
| Docker multi-stage build producing `app.tar.gz` | `Dockerfile` | Current |
| GitLab CI: build, staging (automatic on default branch), production (manual) | `.gitlab-ci.yml` | Current |
| Helm chart for GitLab auto-deploy | `chart/` | Current |
| PM2 process file | `pm2.json` | Current as a deploy artefact. **Requires confirmation** that it is still how production runs |
| In-process job queue and 08:00 cron | `imports/api/JobQueue` | Current |
| Mocha smoke test | `tests/main.js`, `npm test` | Current, and it does not test product rules |

## Completed features (historical notes only)

README "Upgrades Jan 2021" names US-2, US-3, US-4, US-5, US-6, US-7, US-8, US-9, US-10, US-11, US-12. Related behaviour is still in the tree (see tables above). US-10 "Listing process remove items" has no separate flag. **Unknown** which wizard steps were removed.

## Planned or not wired

| Feature | Evidence | Status |
|---|---|---|
| Server render | Commented import in `server/main.js` | Not running |
| Marketing route and Matthew test route | Commented in `general/routes.jsx` | Removed from the router |
| Listing-detail login wall | Commented `triggersEnter` | Not enforced |
| Peach sandbox | Commented constants | Not used |
| DigitalOcean Spaces endpoint | Commented endpoint; AWS region `af-south-1` is what the client sets | **Requires confirmation** |
| Job failure retry | Comment in `job-queue.js` | Not implemented |
| Cordova / legacy browser builds | `npm start` excludes `web.browser.legacy` and `web.cordova` | Not in the dev start command |

## Recently changed

The only commit after the 2022 import is `c784099` on 2025-11-05, message "Request changes". The diff of that commit was not used as a feature list because the repository has no intermediate history. README's 11 November 2025 section adds Docker run examples for an IP host and a WSL note. **Unknown** which application behaviour that commit changed.

## Deprecated or removed

No changelog file is in the tree (a discovery note from 2026-09-28 listed `CHANGELOG.md`; it is not in `master` at `c784099`).

Names that remain but are no longer the only public name:

- npm package `filmspace-meteor_react`
- route `/filmspace-detail/:listingId`
- GitLab environment hostnames `filmspace-staging` and `filmspace`
- README hosts `filmspace.codeswop.com` and `filmspace.co.za`

**Requires confirmation** before treating Filmspace deploy targets as retired.
