Logins and passwords for the site, and the handbook for how m77ag.com is built, so the site can be kept running by someone other than Kyle. Updated Nov 1, 2026.
Every m77ag.com login: admins, employees, landlords, farmers and bankers. Create a login, set a new password, email a set-password link, turn a login off, and choose which farms a landlord sees.
Partner portal accounts: create, approve and manage them, and review pending registrations.
Sections: What the site does · Where everything lives · Technology · How the code is organized · How a change goes live · Settings and secrets · Scheduled jobs · Farm records rules · When something breaks · Taking over the site
m77ag.com is the business system for M77 AG LLC and the related McConnell businesses, built by Kyle McConnell. It has a public website and private portals:
/admin): field records and field cards, farm books, season calendar, soils, equipment, cattle and calf crop, Financial (bills, check printing, expenses, banking, tax), Mail Center, landlords, employees, hunting bookings./landlord): each landlord sees their own farms read only, with their pay-now balance.| Piece | Where | Notes |
|---|---|---|
| Code | GitHub: mcconnellentllc-cloud/m77ag | Full history of every change. Branch main is what runs on the live site. |
| Hosting | Render.com, web service m77ag (Oregon region) | Builds and runs the site. Deploys automatically when main changes. Settings in render.yaml and the Render dashboard. |
| Database | MongoDB Atlas | All records: fields, passes, bills, users, cattle, bookings. Connection string is the MONGODB_URI setting. Uploaded manuals are stored in the database (GridFS). |
| Domain | m77ag.com | The root record points to Render (A record 216.24.57.1) and www to the Render service. Registrar and DNS provider: Fill in |
| Microsoft 365 (togoag.com tenant) | The site sends from the shared mailboxes hunting@m77ag.com and office@m77ag.com through a licensed account with Send As. Check with npm run check:email. | |
| John Deere | developer.deere.com, app "M77 AG Integration" | Operations Center connection for fields and passes. JD imports go into the "M77 AG - Import" bucket so they never overwrite curated field records. |
| Images | Cloudinary | Equipment and listing photos. |
| AI | Anthropic API (Claude) | Mail Center sorting, bank statement reading, the life assistant. |
| Payments | Stripe and PayPal | Hunting and online payments. |
| Mail sync | Google and Microsoft sign-in apps | Mail Center reads Gmail and Outlook mailboxes. |
| kylemcconnell.com | GitHub repo mcconnellentllc-cloud/kylemcconnell | The site publishes pages there with a GitHub token (SITE_PUBLISH_* settings). |
| Layer | What |
|---|---|
| Pages | Plain HTML, CSS and JavaScript in public/. No framework and no build step: edit a page and it is live after deploy. |
| Server | Node.js 18 or newer, Express 5. Entry point server/server.js. |
| Database | MongoDB through Mongoose (models in server/models/). |
| Sign-in | JWT tokens, passwords hashed with bcrypt. Roles: admin, employee, landlord, farmer, banker, customer. |
| Security | Helmet, CORS, rate limiting. |
| Nodemailer over Microsoft 365 SMTP. | |
| Files and PDFs | Multer uploads, pdf-lib and pdfjs (PDF forms and reading), xlsx (spreadsheets), Turf (field boundary acres). |
| Schedules | node-cron jobs inside the server. |
public/ pages people see (admin/, landlord/, js/, css/, assets/)
server/server.js starts the site, connects the database, mounts every /api route
server/routes/ the API: one file per area (cattle, field-ledger, accounts, ...)
server/controllers/ the logic behind larger routes
server/models/ database record shapes (User, CroppingField, FieldOperation, ...)
server/services/ shared calculations (bills owed, calf crop, bank reconciliation, ...)
server/data/ farm records entered from Kyle's documents (statements, tickets,
settlements, cattle feed), one file per subject, each citing its source
server/middleware/ sign-in and access checks (auth.js)
docs/ rules and audits (farm-records-2026.md, audits/)
CLAUDE.md the working guide for the code: design rules, conventions, routes
Design rules (in CLAUDE.md): professional tone, no emojis, mobile first, colors #2d5016 / #2c5530 green and #d4a54a gold on #f5f3f0.
mcconnellentllc-cloud/m77ag (GitHub Desktop, the GitHub site, or a Claude Code session).main and squash merge it.main, runs npm install, then npm start. The new version is live in a few minutes. Build and run logs are in the Render dashboard.To run the site on a computer for testing:
git clone https://github.com/mcconnellentllc-cloud/m77ag cd m77ag npm install (create a file named .env with the settings below; never commit it) npm run dev then open http://localhost:3000
Health check: https://m77ag.com/api/test answers with the API and database status.
Every key and password the server uses is a setting (environment variable) in the Render dashboard, m77ag service, Environment. The code reads them by name; their values are never stored in the code or on this page.
| Area | Setting names |
|---|---|
| Core | MONGODB_URI, JWT_SECRET, NODE_ENV, PORT, SITE_URL, CORS_ORIGINS |
SMTP_HOST, SMTP_PORT, MAIL_SERVICE, EMAIL_AUTH_USER, EMAIL_USER, EMAIL_PASS, HUNTING_SMTP_USER, HUNTING_SMTP_PASS, HUNTING_FROM_ADDRESS, HUNTING_NOTIFY_EMAILS, OFFICE_SMTP_USER, OFFICE_SMTP_PASS, OFFICE_FROM_ADDRESS | |
| John Deere | JD_CLIENT_ID, JD_CLIENT_SECRET, JD_ENVIRONMENT, JD_OPS_SYNC_HOURS |
| AI | ANTHROPIC_API_KEY, AI_MODEL, STATEMENT_AI_MODEL, LIFE_ASSISTANT, LIFE_ASSISTANT_MODEL, ASSISTANT_API_KEY |
| Payments | STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET, PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET, PAYPAL_MODE |
| Images | CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET |
| Mail Center sync | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI, MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET, MICROSOFT_TENANT_ID, MICROSOFT_REDIRECT_URI, MAIL_SYNC_MINUTES |
| kylemcconnell.com | SITE_PUBLISH_TOKEN, SITE_PUBLISH_REPO, SITE_PUBLISH_BRANCH |
| Rental billing | ENABLE_BILLING_CRON |
ENABLE_BILLING_CRON is on).MAIL_SYNC_MINUTES; John Deere sync every JD_OPS_SYNC_HOURS.docs/farm-records-2026.md. Read it before changing any field record, allocation or billing.server/data/ with the source named in each file. Nothing is estimated without saying so.MONGODB_URI and that MongoDB Atlas network access allows Render.npm run check:email; SMTP AUTH must be on for the sending account in the Microsoft 365 admin center./admin/fields.html); the OAuth app is on developer.deere.com.To keep m77ag.com running, the next person needs owner access to each of these accounts. Record who holds each one and where its sign-in is kept:
| Account | What it controls | Owner and where the sign-in is kept |
|---|---|---|
GitHub organization mcconnellentllc-cloud | The code (m77ag and kylemcconnell repos) | Fill in |
| Render.com | Hosting, deploys, settings and secrets | Fill in |
| MongoDB Atlas | The database and its backups | Fill in |
| Domain registrar / DNS for m77ag.com | The web address | Fill in |
| Microsoft 365 (togoag.com tenant) | Email, shared mailboxes | Fill in |
| John Deere developer account | Operations Center connection | Fill in |
| Anthropic Console | AI key | Fill in |
| Stripe, PayPal | Payments | Fill in |
| Cloudinary | Images | Fill in |
| Google Cloud | Gmail sync app | Fill in |
| m77ag.com admin login | The admin side of this site | admin@togoag.com (Kyle and Brandi) |
A developer new to the site should start with CLAUDE.md in the repository, then docs/farm-records-2026.md. The site was built and is maintained with Claude Code; a new Claude Code session on the repository reads CLAUDE.md automatically and can carry on the work.