Website & Paraguay-Taxes Repo Review
Date: 2026-02-11
Reviewer: Friday (AI Agent)
Part 1: agentmaker-website & agentmakerio-web
What Are These?
They are essentially the same site — a simple landing page for agentmaker.io. Both repos have identical package.json, App.tsx, components, CSS, and SVGs. The source code is a copy.
| Aspect | agentmaker-website | agentmakerio-web |
|---|---|---|
| Framework | React 18 + Vite + Tailwind CSS + TypeScript | Same |
| Hosting | Cloud Run (via Cloud Build + Docker) | Firebase Hosting |
| Firebase project | agentmaker-io |
agentmakerio-web |
| Backend | Separate Cloud Function (contact-form/main.py) via Mailgun |
Firebase Function (functions/main.py) via Firestore + Pub/Sub |
| Extra files | cloudbuild.yaml, Dockerfile, .env.example |
.firebaserc, firestore.rules, package-lock.json |
Key difference: agentmaker-website appears to be the active/production version (deployed to Cloud Run with a proper contact-form Cloud Function that sends email via Mailgun). agentmakerio-web is an older Firebase-hosted version with a different backend approach (Firestore + Pub/Sub) and has node_modules accidentally committed inside public/.
Recommendation: Consolidate into one repo. Archive agentmakerio-web.
Content Review
The site is extremely minimal — just two sections:
- Industry Experience — A heading, one line of copy ("Collectively, our team has worked with leading organizations, delivering automation and AI solutions."), and 5 client logos: Lockheed Martin, Deloitte, Nortel, T-Mobile, Cisco.
- Contact Form — Name, email, company (optional), message, submit button.
What's missing: - No hero section / value proposition - No description of what Agentmaker does or offers - No services/products section - No about page, team section, or case studies - No navigation or footer - No pricing or CTA beyond the contact form - No social proof beyond logos (no testimonials, metrics)
This is barely a landing page — it's a contact form with logos. It tells visitors nothing about the business.
SEO Review
| Item | Status | Notes |
|---|---|---|
<title> |
⚠️ Generic | Just "Agentmaker.io" — no keywords |
| Meta description | ❌ Missing | None |
| Open Graph tags | ❌ Missing | No og:title, og:description, og:image |
| Twitter cards | ❌ Missing | None |
| Sitemap | ❌ Missing | No sitemap.xml |
| robots.txt | ❌ Missing | None |
| Heading hierarchy | ⚠️ Poor | No <h1>, jumps to <h2> for both sections |
| Structured data | ❌ Missing | No JSON-LD |
| Canonical URL | ❌ Missing | None |
| Alt text on images | ✅ OK | Logo SVGs have alt text |
SEO is essentially non-existent. The site would be invisible to search engines.
Performance
- Bundle is tiny — React + Tailwind + 2 components. No issues.
- SVG logos are fine — small vector files.
- Google Fonts loaded via CSS import — could use
<link rel="preconnect">for faster load. - ⚠️
agentmakerio-webhasnode_modulescommitted inpublic/—node-fetch,tr46,whatwg-url, etc. These would be deployed to Firebase Hosting and served publicly. This is a bug — wasted bandwidth and potential info leakage.
Design/UX Observations
- Two sections stacked vertically with no visual hierarchy
- No navigation, header, or footer
- No branding beyond the favicon (agentmaker.svg)
- Contact form uses browser
alert()for success/error — poor UX - No loading state on form submission
- No form validation beyond HTML
required - No responsive design testing evident (Tailwind helps but layout is basic)
- Color scheme uses CSS variables (
bg-background,text-foreground,bg-primary) but they don't appear to be defined — likely relying on Tailwind defaults
Contact Form Backend Comparison
agentmaker-website (functions/contact-form/main.py):
- ✅ Proper CORS handling
- ✅ Input validation
- ✅ Mailgun integration with Secret Manager for API key
- ✅ Reply-To header set to submitter's email
- ⚠️ Access-Control-Allow-Origin: * — should restrict to agentmaker.io domain
- ⚠️ No rate limiting — vulnerable to spam
agentmakerio-web (functions/main.py):
- ❌ No CORS headers
- ✅ Pydantic validation
- ⚠️ Stores IP address and user-agent in Firestore (privacy concern)
- ⚠️ No rate limiting
- ⚠️ Publishes to Pub/Sub topic but no subscriber seems defined
Part 2: paraguay-taxes
What Does It Do?
A CLI tool and Cloud Function for automating Paraguay tax filings on the SET Marangatu portal. It:
- Logs into the Marangatu tax portal (government website)
- Checks tax compliance status
- Auto-files Form 211 (monthly VAT/IVA) and Form 955 (invoice registry)
- Calculates late penalties
- Sends notifications via Mailgun, SendGrid, Twilio SMS, or WhatsApp
- Can run as a weekly scheduled Cloud Function on GCP
The actual Marangatu API client (marangatu.py) is not in the repo (likely a private package or was deleted). Only cli.py, notifications.py, and config files are present.
Security Assessment
| Issue | Severity | Details |
|---|---|---|
--allow-unauthenticated on Cloud Function |
🔴 HIGH | The README shows deploying with --allow-unauthenticated. Anyone can trigger tax filings by hitting the URL. |
| Credentials in env vars | ⚠️ MEDIUM | Tax portal credentials passed as plain env vars to Cloud Function instead of Secret Manager |
| Hardcoded backfill periods | ⚠️ LOW | cmd_backfill has hardcoded period lists — will become stale |
| No input sanitization on period | ⚠️ LOW | cmd_file passes period directly to API client |
Missing marangatu.py |
❓ UNKNOWN | Can't audit the core client for security issues |
Notifications Module
Well-structured with abstract base class pattern. Supports 5 notification backends. The MultiNotification class is a nice touch.
Issues:
- No retry logic on failed notifications
- No logging (just print statements)
- format_compliance_report is clean but not used in cli.py (seems designed for the Cloud Function)
Recommendations
- Remove
--allow-unauthenticatedfrom Cloud Function deployment. Use Cloud Scheduler's OIDC authentication instead. - Use Secret Manager for Marangatu credentials (like the website does for Mailgun).
- Add the
marangatu.pymodule to the repo (or document where it comes from). - Replace hardcoded backfill periods with dynamic detection from the portal.
- Add proper logging instead of
printstatements (use Pythonloggingmodule). - Add a
DRY_RUNmode that's actually wired up (it's in.env.examplebut not referenced in code).
Overall Recommendations
Immediate (High Priority)
- Secure the paraguay-taxes Cloud Function — require authentication
- Move Marangatu credentials to Secret Manager
- Delete
public/node_modules/from agentmakerio-web — committed by accident - Archive
agentmakerio-web— consolidate to one repo
Short Term
- Rebuild the website — it needs actual content: hero, services, about, case studies
- Add SEO basics — meta tags, OG tags, sitemap, robots.txt, proper
<h1> - Add CORS restrictions to the contact form function (allow only agentmaker.io)
- Add rate limiting / reCAPTCHA to the contact form
Medium Term
- Consider a proper framework — Next.js or Astro for SSG/SSR and better SEO
- Add analytics — no tracking is currently in place
- Add a blog/content section for organic SEO
- Improve form UX — replace
alert()with inline feedback, add loading states