# Project plan — everspace (Everyspace)

Evidence date: 2026-10-15.

Source of truth for implementation: `git@bitbucket.org:overdrive/everspace.git`, branch `master`, commit `c784099` (2025-11-05, message "Request changes").

There is no prior Silicon Ark directory for this project. The source repository has a long `README.md` and no separate product plan. Statements below are labelled.

## Product

**Documented and implemented.** The public product name is **Everyspace**. Page titles, Open Graph URLs, and the PM2 app name use Everyspace and `https://everyspace.co.za/`. The product lets people find and book film-friendly locations and related spaces in South Africa, and lets location owners list those spaces.

**Implemented, older name.** The npm package and Meteor test name are `filmspace-meteor_react`. README deploy notes, GitLab environment URLs, and some ActiveCampaign hostnames still say Filmspace. The Bitbucket repository slug is `everspace`. Docker image examples use `everyspace`.

**Unknown / Requires Confirmation:** which of those names is the legal product name, and whether Filmspace remains a supported brand.

## Objectives (recovered from the product, not from a plan document)

No project-plan file exists in the repository. The following objectives are **inferred** from routes, copy, and README user-story notes dated around February–March 2021:

1. Let a visitor search South African locations by place, activity, capacity, style, amenities, and price.
2. Let a logged-in person (filmmaker) request a booking and pay by card.
3. Let the listing owner (host) accept, decline, or cancel, and receive a payout record.
4. Let an admin review listings, users, bookings, search locations, and space tags before a listing is public.
5. Keep host and filmmaker communication inside the product (messages), with email, SMS, Intercom, and ActiveCampaign around that.

## Scope

### In scope of the current tree

- Meteor 2.4 web application: React UI, MongoDB, server methods, publications, and an in-process job queue.
- Public marketing home, search, listing detail, legal pages, and contact.
- Account registration, login (password, Google, Facebook), email verification, password reset, mobile verification route.
- Multi-step listing wizard for residential, commercial, studio, and mobile categories.
- Bookings, Peach Payments pre-authorisation / capture / reversal / refund, receipts, VAT invoices, and a booking agreement PDF.
- Host and filmmaker dashboards: listings, favourites, messages, bookings, payout bank details, notification setting.
- Admin area for users, listings, category-to-form mapping, bookings, space tags, and map locations.
- Docker image build, GitLab CI deploy chart, and older PM2 / shell deploy notes.

### Out of scope of this repository

- The MongoDB server itself, nginx, and the Kubernetes cluster are configured outside this tree. The chart expects GitLab auto-deploy.
- Native mobile apps. Meteor mobile packages are present; no Cordova project is in the tree. `npm start` excludes `web.cordova`.
- A separate public API for third parties. Clients use Meteor methods and publications.

## System architecture

One Meteor application.

| Layer | What it is | Evidence |
|---|---|---|
| Client | React 16, FlowRouter, Foundation CSS built by Gulp from `src/` | `package.json`, `imports/routes`, `gulpfile.babel.js` |
| Server | Meteor methods, publications, `node-cron`, Puppeteer PDFs | `server/main.js`, `imports/api` |
| Data | MongoDB. Collection names are listed in technical documentation | `new Mongo.Collection` |
| Files | `ostrio:files` for listing images; Sharp watermarks | `imports/api/Listings` |
| Object storage | AWS SDK S3 client, region `af-south-1`. Env names say DigitalOcean. A Spaces endpoint is commented out | `digital-ocean-spaces-client.js` |
| Payments | Peach Payments / OPPWA, currency ZAR | `PeachPaymentsService.js` |
| Jobs | Mongo `job_queue` plus in-process timeouts. Daily cron at 08:00 | `imports/api/JobQueue` |
| Deploy | Multi-stage Docker (`geoffreybooth/meteor-base:2.4`, Node 14.18.1). GitLab CI builds an image and a `app.tar.gz`, then auto-deploys staging and production | `Dockerfile`, `.gitlab-ci.yml`, `chart/` |

## Major components

- **Accounts and roles** — Meteor accounts, `alanning:roles`. Roles seen in code: global `admin`, global `host`, and per-listing `editor`. The dashboard also has a client-side acting mode `filmmaker` or `host` stored in `localStorage` (`userActingAs`). That mode is not the same thing as the `host` role.
- **Listings** — create, wizard, photos, pricing tiers, calendar, publish review, search.
- **Locations and space tags** — admin-managed search areas (`locations`) and tags (`spaces_tags`).
- **Activities** — seeded activity taxonomy used in search and booking requests.
- **Bookings and pricing** — pre-booking, payment, host decision, cancellation, completion job.
- **Messaging** — threads between filmmaker and host, including a custom rate.
- **Reviews** — listing reviews and user reviews, with delayed email jobs.
- **Admin** — gated routes under `/admin`.
- **Notifications** — email templates in `private/email-templates`, Twilio SMS, Intercom events, ActiveCampaign contact fields.

## Milestones visible in the repository

These are notes in `README.md`, not a tracked plan. Provenance: **Documented** in that file. Git history does not contain a commit per week. `master` has three commits, all by Jaco Brits: `18fcb3f` (2022-08-30), `e90a8b6` (2022-08-30), `c784099` (2025-11-05).

README "Upgrades Jan 2021" lists:

| Window (as written) | Stories |
|---|---|
| 10–15 Feb | US-5 Filepull overhaul / download image |
| 16–22 Feb | US-2 Spaces tags |
| 23 Feb–3 Mar | US-3 Search page mapping — CPT, JHB, DRB and GR |
| 4–8 Mar | US-4 Back-end user content override |
| 9–11 Mar | US-11 Host and filmmaker message notifications; US-8 Zero service fees |
| 12–15 Mar | US-7 Keep communications on Filmspace; US-6 Minimum hours tooltip; US-10 Listing process remove items; US-9 User feedback modal; US-12 Intercom chatbot |

README also records a 17 June 2022 note about Node versions, and an 11 November 2025 Docker run note.

**Unknown / Requires Confirmation:** whether those user stories were all accepted, and what "Request changes" on `c784099` refers to. The commit message has no body.

## Implementation plan

No forward plan is in the repository. Current state is a shipped Meteor application with several deploy paths written down side by side. There is no TODO list, issue tracker, or roadmap file in the tree.

## Known dependencies

Runtime and integrations the code expects:

- MongoDB (`MONGO_URL`)
- SMTP (`MAIL_URL`)
- Peach Payments (OPPWA). Credentials are hardcoded in source. Values are not copied here.
- AWS SDK credentials via `DO_ACCESS_KEY` / `DO_SECRET` or `Meteor.settings.DO_SPACES`
- ActiveCampaign (`ACTIVE_CAMPAIGN_URL`, `ACTIVE_CAMPAIGN_KEY`, track key and account id)
- Intercom (`intercom-client`)
- Twilio (account, token, and sending number are hardcoded)
- Google and Facebook OAuth (client id and secret are hardcoded)
- Google reCAPTCHA (secret is hardcoded in `recaptchaVerify`)
- Google Maps types (`@types/google.maps`) and Google Tag Manager id `UA-158596565-1`
- Facebook pixel `fbq` on route change
- Chromium in the Docker image for Puppeteer
- Node 14.18.1 in the production image. README says local `npm install` used Node 12.13.0 and Gulp used Node 10.16.0

## Current project status

**Implemented** and last committed on 2025-11-05. The application is large (about 537 JS/JSX/TS files outside `node_modules`). Tests do not cover product behaviour: `tests/main.js` only checks the package name and `Meteor.isClient` / `Meteor.isServer`.

**Unknown / Requires Confirmation:**

- Which host is production today: PM2 at `https://everyspace.co.za/` (`pm2.json`), GitLab auto-deploy URL `http://filmspace.$KUBE_INGRESS_BASE_DOMAIN`, older hosts `filmspace.codeswop.com` and `filmspace.co.za` in README, or the November 2025 Docker example bound to `156.38.132.154`.
- Whether committed credentials are still valid. They must be treated as exposed. See technical documentation. This plan does not repeat secret values.
- Whether the early-bird filmmaker service-fee waiver is still an approved commercial rule. The code applies it on every new booking.

## Human review

- Confirm the live environment and the brand name (Everyspace vs Filmspace).
- Confirm that exposed credentials in README, `pm2.json`, payment, SMS, OAuth, reCAPTCHA, and the dev Mongo script have been rotated.
- Confirm admin bootstrap behaviour in `imports/api/Admin/server/init/create_admin.js` (three email addresses, hardcoded password, role `admin`).
