Moss Seal

Site GuideHow the Ultranet is built, what it costs, and how to keep it running

How the Ultranet works

Written for Taylor, Luis and whoever runs IT after Ian. No programming knowledge assumed. Updated October 2026.

The short version. The Ultranet is a small website hosted on Cloudflare's free tier. There is no server at Moss to patch, no software to install on anyone's PC, and nothing here can change TRAVERSE or ProcessPro. If it ever had to be switched off, nothing else at Moss would notice.

What this is

One internal website, moss-ultranet.pages.dev, with a few tools inside it:

PageWho uses itWhat it does
Help DeskEveryonePage IT with your location and the problem. IT sees it on the IT Admin board, marks "on my way", closes it with a note, and a PDF work ticket is kept.
HR → Time offEveryoneSubmit a PTO request; see whether it was approved.
HR → DirectoryEveryonePhone book: extension, phone, email, department.
BrandingEveryoneThe logo files, the LinkedIn banner, the email signature builder, and the rules for using them.
Admin → IT AdminITThe help desk board with the action buttons.
Admin → HR AdminHRApprove or deny time off, maintain birthdays, events and the directory.
Admin → Accounting → Sales TaxTaylor, IanDecide per invoice whether sales tax applies and at what rate; keep exemption certificates; batch-check a day's orders before posting.
HomeEveryoneCalendar of birthdays and events, and a live help desk card.

What it runs on

Everything is a standard, documented service. Nothing was built from scratch that a contractor or a Cloudflare support article could not explain.

ServiceRoleAccount
Cloudflare PagesHosts the pages and runs the small program (a "Pages Function") behind each form. Project name: moss-ultranet.Cloudflare account under ianminnr@gmail.com (see below about moving it)
Cloudflare D1Two small databases: moss-help-desk (help desk pages, time off, birthdays, events, directory) and moss-sales-tax (certificates, rules, rate tables, decisions).Same account
US Census Bureau GeocoderTurns a ship-to address into a map point and county. Public, free, no account.None
Texas Comptroller boundary service and rate pagesWhich Texas taxing jurisdictions a point is in, and their rates. Public, free.None
Google FontsThe two typefaces (Manrope, Inter).None

Not used: no email provider, no SMS, no third-party login, no analytics, no paid API keys. The help desk can send email or phone alerts if a Resend or ntfy account is added later; today it does not.

What it costs

ItemCostFree-tier limitMoss usage
Cloudflare Pages + Functions$0100,000 requests per dayA few hundred on a busy day
Cloudflare D1 (two databases)$05 GB, 5 million reads per dayUnder 1 MB
Domain$0The pages.dev address is included. A moss-seal.com subdomain can be pointed at it for free if wanted.

There is no subscription and no card on file for any of this. The only way it could start costing money is if someone enabled a paid feature on purpose (for example Cloudflare R2 storage for large certificate scans, which asks for a card even though the first 10 GB are free).

Logins and the admin password

  • Staff pages (Page IT, Time off, Directory, Branding, Home) need no login. The address is only shared inside the company.
  • Admin pages share one password. Sign in once per browser; it stays signed in for 30 days.
  • Nobody can look the password up, Ian included. Cloudflare stores it write-only. If it is lost, it is reset, not recovered.

Resetting the admin password

Needs a PC with Node.js installed and a Cloudflare login for the account (see Changing the site for the one-time setup). In the project folder:

npx wrangler pages secret put ADMIN_PASSWORD --project-name moss-ultranet
npx wrangler pages deploy public --project-name moss-ultranet

The first command asks for the new password (type it, it stays hidden). The second one publishes the site again; Cloudflare only picks up a new password after a publish. Without the second step the old password keeps working.

Day-to-day, no code needed

These are all done in the browser on the admin pages. None of them requires Ian.

TaskWhereWho
Approve or deny time off, cancel, export the listHR AdminHR
Add or remove birthdays and events (trade shows, holidays)HR AdminHR
Add, edit, remove people in the directoryHR Admin → DirectoryHR
Work and close help desk pages, print work ticketsIT AdminIT
Enter a customer's exemption certificate with its scanSales Tax → CertificatesTaylor / AR
Check one invoice for taxSales Tax → LookupTaylor / AR
Check a day's orders before postingSales Tax → Batch CSV (upload the Open Order Detail export)Taylor / AR
Change which states Moss collects in, Texas sourcing, local ratesSales Tax → RulesTaylor
Refresh the Texas rate table after a quarter changeSales Tax → Rules → "Refresh Texas rates"Taylor / Ian

Maintenance calendar

WhenWhatHow long
Jan 1, Apr 1, Jul 1, Oct 1Texas local tax rates change. Click "Refresh Texas rates" on Sales Tax → Rules.1 minute
MonthlyOpen Sales Tax → Certificates and clear the "expiring" banner: chase renewals (Louisiana resale certificates last one year).10 minutes
MonthlyTake a backup (next section).2 minutes
YearlyCheck the state rate table against the cited source (Tax Foundation) on Sales Tax → Rules and update any that changed.20 minutes
When someone joins or leavesUpdate the directory and birthdays on HR Admin. Remove them from the help desk assignee list if they were IT (that one is in the code, see "Changing the site").5 minutes
When the admin password changes handsReset it (above). One password covers all admin pages.5 minutes

There are no software updates to install. Cloudflare maintains the platform.

Changing the site

Content changes (people, events, certificates, tax rules) need no code. Changing the pages themselves does: the site is a folder of files that gets published to Cloudflare. Anyone comfortable with a command line can do it, and any web contractor can do it in an afternoon, because the stack is plain HTML, JavaScript and SQL with no framework.

One-time setup on a PC

  1. Install Node.js (the free LTS version from nodejs.org).
  2. Get the project folder (moss-internal). It should live in a shared place: a GitHub repository or the company file share, not only on one laptop.
  3. In that folder run npx wrangler login. A browser window asks you to allow access to the Cloudflare account.

Publishing a change

npx wrangler pages deploy public --project-name moss-ultranet

That is the whole deployment. It takes about ten seconds and the live site updates immediately. If a change goes wrong, Cloudflare keeps every previous version: in the Cloudflare dashboard open Workers & Pages → moss-ultranet → Deployments and click "Rollback" on the last good one.

Where things are in the folder

Folder or fileContains
public/The pages people see. index.html is Home; helpdesk/, hr/, tax/, signature/, guide/ are the sections.
functions/api/The programs behind the forms: help desk, HR, sales tax.
src/Shared logic: login cookies, the sales tax decision engine, geocoding, the PDF work ticket.
migrations/, migrations-tax/The database tables, as numbered SQL files. Applied once each with npx wrangler d1 migrations apply <database> --remote.
src/helpdesk/options.jsThe help desk's locations and the list of IT people (assignees). Edit, then publish.
README.md, QUESTIONS-FOR-TAYLOR.mdThe developer-level documentation and the open tax questions.

Where the data lives, backups

All data is in the two Cloudflare D1 databases. Cloudflare keeps its own point-in-time history for 30 days, and you can take a file backup any time:

npx wrangler d1 export moss-help-desk --remote --output helpdesk-backup.sql
npx wrangler d1 export moss-sales-tax --remote --output salestax-backup.sql

Each file is a plain SQL text file that can be opened in Notepad and restored with npx wrangler d1 execute <database> --remote --file <file>. Put the monthly backups on the company file share.

Certificate scans uploaded on the Sales Tax pages are stored inside the sales tax database today (1.5 MB per file). Keep the paper or PDF originals as well; the registry is the index, not the only copy.

What it does NOT touch

  • It never connects to TRAVERSE or ProcessPro Global. The sales tax batch reads a CSV or Excel export that a person uploads; nothing is written back.
  • It has no access to the office network, SQL Server, email, or Microsoft 365.
  • It holds no financial data beyond what is typed into it: invoice amounts for a tax decision and certificate numbers.
  • Turning it off (deleting the Cloudflare project) loses the help desk history, PTO records, directory and certificate registry, and nothing else.

If Ian is not here

Three things keep this safe to inherit: the Cloudflare account must not be a personal one, the project folder must not live on one laptop, and the admin password must be known by two people.
  1. Move the Cloudflare account to the company. Today it is under ianminnr@gmail.com. Either create a Cloudflare account on a Moss address (for example it@moss-seal.com) and transfer the Pages project and both D1 databases to it, or add a second member with the Administrator role under Manage Account → Members, so the account is never single-person. Do this before anything else.
  2. Put the project folder in a shared place. A private GitHub repository under a Moss organization is the standard answer; the company file share works too. Whoever maintains it later needs the folder, not Ian's PC.
  3. Write the admin password in the company password manager, shared with Taylor and the next IT person. If nobody has it, reset it with the two commands under Logins.
  4. Hand this page and the README to whoever takes over. A contractor who knows Cloudflare Pages can take it from there; it is a common platform, not a custom one.

What Taylor and Luis can do with no help at all

Everything in the day-to-day table. The admin pages are the whole job for HR, the help desk and sales tax. Code is only needed to change how a page looks or add a new tool.

What to tell a contractor

"Cloudflare Pages site with Pages Functions and two D1 databases, plain HTML/JS, no framework, no build step. Deploy with wrangler. README in the repo." That sentence is enough for anyone who has used Cloudflare.

When something breaks

SymptomLikely causeFix
Site does not load at allCloudflare outage (rare) or the project was deletedCheck cloudflarestatus.com. If the project is gone, restore from the folder: publish again and re-apply the migrations, then restore the latest backup files.
"That password isn't right" for everyonePassword was reset without a publish, or forgottenRun the two reset commands under Logins.
Pages load but every form says "Something went wrong"A database binding is missing after a config changeMake sure wrangler.toml still lists both D1 databases, then publish again.
Sales tax lookup says the address could not be geocodedThe Census geocoder did not recognise the address (PO boxes, new streets)Correct the address or type the latitude/longitude; Texas results still work for origin-sourced orders.
Texas rate looks wrongQuarter changed and the table was not refreshedSales Tax → Rules → Refresh Texas rates.
Help desk alerts not arrivingNo alert channel is configured (none is today)IT Admin shows the board; alerts need a Resend or ntfy account added as described in the README.

Map of the pieces

Browser  ──►  moss-ultranet.pages.dev (Cloudflare Pages)
                 ├─ static pages: Home, Help Desk, HR, Branding, Sales Tax, this guide
                 └─ Pages Functions (the "server"):
                      /api/*       help desk   ──►  D1: moss-help-desk
                      /api/hr/*    HR          ──►  D1: moss-help-desk
                      /api/tax/*   sales tax   ──►  D1: moss-sales-tax
                                               ──►  Census geocoder (public)
                                               ──►  Texas Comptroller boundary service (public)

Not connected: TRAVERSE / ProcessPro, SQL Server, Microsoft 365, email.

Questions about this page: Ian, or the README in the project folder.