How the Ultranet works
Written for Taylor, Luis and whoever runs IT after Ian. No programming knowledge assumed. Updated October 2026.
What this is
One internal website, moss-ultranet.pages.dev, with a few tools inside it:
| Page | Who uses it | What it does |
|---|---|---|
| Help Desk | Everyone | Page 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 off | Everyone | Submit a PTO request; see whether it was approved. |
| HR → Directory | Everyone | Phone book: extension, phone, email, department. |
| Branding | Everyone | The logo files, the LinkedIn banner, the email signature builder, and the rules for using them. |
| Admin → IT Admin | IT | The help desk board with the action buttons. |
| Admin → HR Admin | HR | Approve or deny time off, maintain birthdays, events and the directory. |
| Admin → Accounting → Sales Tax | Taylor, Ian | Decide per invoice whether sales tax applies and at what rate; keep exemption certificates; batch-check a day's orders before posting. |
| Home | Everyone | Calendar 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.
| Service | Role | Account |
|---|---|---|
| Cloudflare Pages | Hosts 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 D1 | Two 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 Geocoder | Turns a ship-to address into a map point and county. Public, free, no account. | None |
| Texas Comptroller boundary service and rate pages | Which Texas taxing jurisdictions a point is in, and their rates. Public, free. | None |
| Google Fonts | The 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
| Item | Cost | Free-tier limit | Moss usage |
|---|---|---|---|
| Cloudflare Pages + Functions | $0 | 100,000 requests per day | A few hundred on a busy day |
| Cloudflare D1 (two databases) | $0 | 5 GB, 5 million reads per day | Under 1 MB |
| Domain | $0 | The 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.
| Task | Where | Who |
|---|---|---|
| Approve or deny time off, cancel, export the list | HR Admin | HR |
| Add or remove birthdays and events (trade shows, holidays) | HR Admin | HR |
| Add, edit, remove people in the directory | HR Admin → Directory | HR |
| Work and close help desk pages, print work tickets | IT Admin | IT |
| Enter a customer's exemption certificate with its scan | Sales Tax → Certificates | Taylor / AR |
| Check one invoice for tax | Sales Tax → Lookup | Taylor / AR |
| Check a day's orders before posting | Sales Tax → Batch CSV (upload the Open Order Detail export) | Taylor / AR |
| Change which states Moss collects in, Texas sourcing, local rates | Sales Tax → Rules | Taylor |
| Refresh the Texas rate table after a quarter change | Sales Tax → Rules → "Refresh Texas rates" | Taylor / Ian |
Maintenance calendar
| When | What | How long |
|---|---|---|
| Jan 1, Apr 1, Jul 1, Oct 1 | Texas local tax rates change. Click "Refresh Texas rates" on Sales Tax → Rules. | 1 minute |
| Monthly | Open Sales Tax → Certificates and clear the "expiring" banner: chase renewals (Louisiana resale certificates last one year). | 10 minutes |
| Monthly | Take a backup (next section). | 2 minutes |
| Yearly | Check 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 leaves | Update 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 hands | Reset 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
- Install Node.js (the free LTS version from nodejs.org).
- 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. - 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 file | Contains |
|---|---|
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.js | The help desk's locations and the list of IT people (assignees). Edit, then publish. |
README.md, QUESTIONS-FOR-TAYLOR.md | The 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
- 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.
- 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.
- 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.
- 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
| Symptom | Likely cause | Fix |
|---|---|---|
| Site does not load at all | Cloudflare outage (rare) or the project was deleted | Check 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 everyone | Password was reset without a publish, or forgotten | Run the two reset commands under Logins. |
| Pages load but every form says "Something went wrong" | A database binding is missing after a config change | Make sure wrangler.toml still lists both D1 databases, then publish again. |
| Sales tax lookup says the address could not be geocoded | The 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 wrong | Quarter changed and the table was not refreshed | Sales Tax → Rules → Refresh Texas rates. |
| Help desk alerts not arriving | No 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.
