Platform Changelog
We are building the most reliable procurement platform in South Africa. Follow our journey of continuous improvement, data quality, and transparency.
Fixed a 500 error on forensic analysis supplier pages caused by a Prisma query referencing a non-existent field on SourceOrganization. Source organizations store province data under provincesOperating (JSON array or comma-separated), not a single province field.
Key Changes
- •Forensic analysis supplier pages now load successfully instead of returning HTTP 500.
- •Province data is correctly extracted from the stored provincesOperating field, with fallback to "National" when empty.
Platform Impact
Forensic supplier profiles are no longer broken by the Prisma validation error.
Rebuilt the admin analytics page as a tabbed observability dashboard with realtime online-user tracking, referrer/landing-page analytics, configurable time buckets, and JSON/CSV export.
Key Changes
- •Added six tabs: Overview, Online Users, Traffic & Referrers, System Health, Events, Export.
- •Online-user time-series powered by a 5-minute presence-sampling cron writing to SystemMetric.
- •Referrer and landing-page tracking via a public, rate-limited beacon persisted to AnalyticsEvent.
- •Configurable time buckets: 15min, 30min, 1h, 24h, 7d, 1month.
- •JSON/CSV export for all observability data sources.
- •Removed mock-data fallback from admin analytics; failures now show clear error states.
Platform Impact
Admins can now monitor platform traffic, user presence, and system health in near-realtime with exportable data.
Pre-created Tender Radar profiles were returning zero live results because the category resolver used stale seeded categories instead of querying real database categories tenders are linked to.
Key Changes
- •resolveDbCategoryFilters now queries real tenderCategory rows from the DB instead of using COMMON_CATEGORIES seed data (removed).
- •Category filter query changed from case-sensitive Prisma in to case-insensitive equals with mode: insensitive, bridging casing gaps between OCDS-created categories and profile search terms.
- •Added issuingOrganizations filter dimension to ExploreProfile and CompanyProfileDefinition — profiles can now filter by municipality, department, or SOE name.
Platform Impact
Tender Radar company profiles now return actual matching tenders based on real DB categories. Organization-based filtering is available as a new profile dimension.
Fixed bank account number exposure on GET status endpoint (now masked), race condition on admin verification, empty subscriptionId on invoice creation, audit log placement, and NotificationType enum use.
Key Changes
- •Mask bank account number in GET /api/payments/bank-transfer/[id] response (was returning unmasked).
- •Re-read transfer status inside $transaction in verifyTransfer to prevent concurrent admin race conditions.
- •Fixed invoice subscriptionId resolving to empty string on new-subscription path.
- •Moved BANK_TRANSFER_VERIFIED audit log creation inside the $transaction for atomicity.
- •Replaced as never casts with NotificationType.PAYMENT_PROCESSED enum value.
- •Passed error to serializeError in pending transfers catch block.
Platform Impact
Bank account numbers are no longer leaked via the status endpoint. Concurrent admin verifications are safe against race conditions. Invoices always reference the correct subscription.
Bank Transfer / EFT is now available as a payment method alongside Paystack card payments. Users select their preferred method after choosing a plan, receive a unique reference number to include in their EFT, and see bank details on a confirmation page. Admins manage the verification workflow: mark as received, verify funds, and activate subscriptions. Pending transfers expire automatically via cron, and users see a dashboard banner for pending transfers.
Key Changes
- •Added BankTransferPayment model to prisma/subscription-domain.prisma (additive, Tier 3).
- •Created bank-account.config.ts reading bank details from environment variables.
- •Created bank-transfer.service.ts with initiate, markAsReceived, verify, cancel, list, summary, and expireStale methods.
- •Created 8 API routes: POST initiate, GET status, GET pending, admin list, admin receive, admin verify, admin cancel, admin summary.
- •Created GET /api/cron/bank-transfer-expiry for automatic expiry of stale pending transfers.
- •Created admin UI at /admin/payments/bank-transfers with tabbed filter, action buttons, and detail modal.
- •Modified UpgradeSheet to show payment method choice (Paystack or Bank Transfer) after plan selection.
- •Created confirmation page at /payment/bank-transfer/[id] with reference copy button and bank details.
- •Added pending bank transfer banner to dashboard.
- •Added inline email templates for initiation and verification notifications.
Platform Impact
Users without credit cards can now pay via bank transfer/EFT. The manual verification flow allows admins to confirm payments and activate subscriptions. Unique reference numbers prevent payment confusion.
Expanded the Tender Radar profile library from 19 to 35 company archetypes, covering stationery, pest control, waste management, CCTV, mining services, hospital catering, school nutrition, pharmaceuticals, medical devices, printing, uniforms, event management, marketing, HR/recruitment, fire protection and water/sanitation. Each new profile is mapped to real seeded categories via the category resolver, includes 2–4 FAQs and profile-specific OG highlight text, and is validated by new unit tests.
Key Changes
- •Added 16 new TenderRadar/CompanyProfile definitions in src/lib/explore/company-profiles.ts.
- •Extended src/lib/explore/category-mapping.ts with resolver entries for all new profile category slugs.
- •Added CATEGORY_LABELS entries in src/lib/explore/explore-utils.ts for new primary categories.
- •Updated /tender-radar landing-page examples (ExploreExamples) to surface 9 diverse, high-intent profiles.
- •Profile-specific OG highlight text now drives the /api/og/tender-radar-profile share card when defined.
- •Added unit tests for category resolver coverage and company-profile structural integrity.
Platform Impact
Tender Radar now generates ~315 static profile/province URLs (35 profiles × 9 provinces), up from ~171, capturing more long-tail [service] tenders [province] search demand while keeping every profile mapped to real database categories.
Complete sitemap coverage for all 604 Tender Radar static URLs (1 landing + 288 province/category pages + 315 profile pages). Updated priority and changefreq values aligned with search importance: landing (0.9/daily), indexes (0.8/daily), profiles (0.85/daily). All page types verified to emit self-referencing canonical URLs. Internal linking chain connects profile pages to parent indexes, back to /tender-radar, and to related profiles. Province/category index profile cards use standard <a> elements with full province names in anchor text.
Key Changes
- •Updated getTenderRadarUrls() priority/changefreq: landing 0.9/daily, indexes 0.8/daily, profiles 0.85/daily.
- •Confirmed all Tender Radar page types set alternates.canonical via getBaseUrl() in generateMetadata.
- •Verified query-param wizard (/tender-radar?...) emits noindex,nofollow to prevent cannonibalisation.
- •Profile pages already link to parent province/category pages, /tender-radar, and related profiles.
- •Province/category index pages render profile cards as standard <a> elements with province name in anchor text.
- •Landing-page ExploreExamples grid links to canonical /tender-radar/{category}/{province}/{profileSlug} URLs.
- •Added/updated sitemap-data unit test: validates priority, changefreq, and URL count for all 604 Tender Radar URLs.
Platform Impact
All 604 Tender Radar static URLs are now discoverable via the sitemap with appropriate priority signals. Internal linking creates a dense topic graph connecting landing → category/province → profile, which helps search engines understand site structure and distribute authority across the section.
Added branded dynamic OG images for Tender Radar profile and province pages, replaced hard-coded URLs with getBaseUrl(), added Twitter cards, and rolled out the platform identity schema bundle (Organization + WebSite + SearchAction + BreadcrumbList). Profile pages now emit WebPage with speakable selectors, a Service schema, and an ItemList of live tenders; province/category pages emit an ItemList of profile cards. Dynamic wizard results with query parameters are now noindex.
Key Changes
- •Created /api/og/tender-radar-profile endpoint with 1200×630 BrandedOgLayout output and 24-hour Edge cache headers.
- •Updated metadata on /tender-radar, /tender-radar/[category]/[province], and /tender-radar/[category]/[province]/[profileSlug] to use getBaseUrl() and include twitter summary_large_image cards.
- •Added canonical Organization, WebSite + SearchAction, and BreadcrumbList JSON-LD to all three Tender Radar page types.
- •Added WebPage with speakable selectors, Service schema, and ItemList of matching tenders to profile pages.
- •Added ItemList of profile cards to province/category index pages.
- •Added SoftwareApplication schema describing Tender Radar to the landing page.
- •Emit robots noindex,nofollow when /tender-radar renders with query parameters.
Platform Impact
Tender Radar pages are now more shareable on social platforms, richer in search snippets, and aligned with the rest of the site schema. Dynamic wizard result URLs are hidden from search indexes so static profile pages remain the canonical landing pages.
Fixed a category-matching bug that caused most Tender Radar company profile pages to return zero tenders. Profile pages now match against the real database category names and canonical names, including sensible aliases across related categories.
Key Changes
- •Tender Radar profile pages now return relevant tenders instead of empty results.
- •Category matching now uses both database category slugs and title-case canonical names.
- •Cross-category aliases are handled so related categories match correctly (e.g. cleaning-services maps to Cleaning & Maintenance).
Platform Impact
Visitors browsing company-type and province profile pages see real, relevant tender opportunities instead of empty lists.
Three additional tender detail paywall channels that were deferred from the original v1.3 paywall launch: supplier contact details (registration number, contact person, email, phone, address of the awarded supplier), per-document AI summaries in the SEO document list, and AI-computed tender value estimates. The workspace page shows the built-in purple "Unlock Value Estimates" placeholder for the value channel; the SEO pages use the standard dual-CTA overlay for all three. Cross-page consistency is preserved — a free user navigating between the public SEO page and the authenticated workspace for the same tender sees the same gate treatment. Tier 2 FROZEN modules (FeatureGatingService, TenderValueService) are reused read-only; no frozen module is modified.
Key Changes
- •TenderAwardsCard now accepts a `contactGated` prop. When true (workspace passes `!hasDocAccess`), the supplier contact block (registration, contactPerson, email, phone, address) is wrapped in a PremiumContentGate via the ternary pattern established in v1.3. Public fields (supplierName, RestrictedSupplierBadge, forensic risk pill, CompanyReportButton) stay outside the gate. The 4 SEO layouts (Active, Closed, Cancelled, Awarded) use the external PremiumContentGate wrap for the dual-CTA + JSON-LD signal.
- •TenderDocumentsList now accepts a `gated` prop. When true, the document list body (with per-doc aiSummary) is wrapped in PremiumContentGate. The empty state (no documents) stays public. The 5 SEO layouts (Active, Closed, Cancelled, Awarded, Notice) use the external PremiumContentGate wrap.
- •TenderValueSection now accepts an `isLocked` prop. When true, the section returns early with `<TenderValueCard estimate={null} isLocked={true} />` and SKIPS the expensive `tenderValueService.estimateForTender` database query (perf win for free users — the query scans comparable awarded contracts). Otherwise, `isLocked={false}` is forwarded to the card. The workspace page passes `isLocked={!hasDocAccess}`; the 4 SEO layouts use the external PremiumContentGate wrap (replaces the built-in isLocked UI to gain dual-CTA + JSON-LD).
- •Both the public tender page and the workspace page now emit a JSON-LD paywall WebPage node with isAccessibleForFree="False" and 9 WebPageElement hasPart entries (up from 6), one per gated content category. The 3 new cssSelectors are `.premium-supplier-contact-container`, `.premium-document-list-container`, and `.premium-value-estimate-container`.
- •Removed two dead imports from NoticeTenderLayout: `TenderValueSection` and `TenderValueSkeleton` (neither was rendered in the notice layout). Cleanup, zero behavior change.
Platform Impact
All 9 paywalled channels are now uniform across both tender detail pages. The value estimate channel uses the built-in purple placeholder UI on the workspace (since hasDocAccess is available server-side) and the standard dual-CTA overlay on the SEO pages. The supplier contact and document list channels use the dual-CTA overlay everywhere. Professional/Enterprise subscribers, active Action Pack bundle holders, and existing trial users see full content unchanged. Anonymous visitors on the SEO page may issue 9 parallel feature-access fetches (v1.3 C-4 corrective is a separate spec).
Anonymous visitors and free-tier accounts now see a paywall on every tender detail page (both /sa-tenders/tender/[slug] and /tenders/[id]) for document analysis, AI summaries, AI key requirements, contact information, issuing organization details, and briefing venue. Paid access requires an active subscription (Professional / Enterprise) or any active Action Pack bundle wallet. New registrations no longer create a 14-day Starter trial — they start as free-tier. Existing trial users are grandfathered.
Key Changes
- •Document analysis sections (DocumentAnalysisSection on the public page, TenderDocumentAnalysisCard on the workspace) are now wrapped in a PremiumContentGate with the analysis stepper as preview and a blur + dual-CTA overlay for free users.
- •AI summary card and inline AI key requirements are paywalled on the public page; the AI compliance checklist on the workspace page renders a placeholder (no 100-char excerpts) for free users.
- •Contact information card, sidebar Contact Information card, and Issuing Organization card (directors + org contact details) are paywalled on both pages.
- •Briefing venue (physical address) is paywalled on the three SEO layouts that render the briefing card (Active, Closed, Cancelled).
- •New registrations create a free-tier account (tier: "free", isTrial: false, 0 application slots, ACTIVE status) instead of a 14-day Starter trial. Downstream services that assume a Subscription row continues to work unchanged.
- •The /api/subscription/feature-access/[feature] endpoint now also accepts a BundleWallet holder as paid access — the response includes a new "source" field ("subscription" | "bundle" | "none").
- •Both the public tender page and the workspace page now emit a JSON-LD paywall WebPage node with isAccessibleForFree="False" and 6 WebPageElement hasPart entries, one per gated content category. All gated text remains in the initial HTML for SEO; only the visual blur and overlay are client-side.
Platform Impact
Premium content access is now uniform across both tender detail pages. A free user navigating between the public SEO page and the authenticated workspace for the same tender sees the same paywall behavior for the same content category. Professional/Enterprise subscribers, active Action Pack bundle holders, and existing trial users see full content unchanged.
Company intelligence profile pages were loading very slowly or timing out due to expensive database queries and a remnant of the restricted supplier integration that was removed from the UI but still ran on every page load. The page now loads in seconds instead of timing out.
Key Changes
- •Fixed the distinct-company count query that ran a full GROUP BY without LIMIT (5-30s query) — replaced with SELECT DISTINCT which is an order of magnitude faster.
- •Replaced the related-companies search with a lightweight paginated query instead of the full search pipeline.
- •Removed the OCPO restricted supplier database check from forensic scoring — the associated UI banner was already removed but the backend query still ran on every page load.
- •Moved the cipcEnrichment.count() outside the per-flag loop in forensic context computation — was running N times per page, now runs once.
Platform Impact
Company intelligence profile pages load reliably instead of timing out. This affects every company profile page on the platform.
Company intelligence profiles now surface World Bank debarments alongside the existing OCPO restricted supplier data. If a SA-registered company appears on the World Bank debarment list, it will be flagged in their profile — expanding compliance coverage beyond South Africa's National Treasury list.
Key Changes
- •World Bank debarred firms are now checked against registered South African companies. Any match is surfaced on the company's intelligence profile.
- •Data is refreshed weekly to stay current.
Platform Impact
Broader compliance coverage — company profiles now surface international debarments alongside local OCPO restrictions.
Every company profile now shows a unified restricted supplier status banner — red for active restrictions, amber for expired ones, green for clean records. Organisation and province pages list restricted suppliers tied to that body. Award cards show a badge next to restricted supplier names.
Key Changes
- •Company Intelligence pages always show a restricted supplier status banner with per-source breakdown.
- •Organisation detail pages list restricted suppliers tied to that body, with links to their profiles.
- •Province detail pages show restricted suppliers tied to local authorities in that province.
- •Award cards show a red "Restricted" or green "Verified" badge next to the supplier name.
- •Award detail pages show a warning card when the winning supplier has active restrictions.
Platform Impact
Restricted supplier information is now surfaced across the platform wherever a company appears — on its profile, in award listings, and on organisation or province pages — without needing to check a separate list.
Company intelligence pages for claimed company profiles were crashing when the claim-owner enrichment section tried to load. The owner's contact details, capabilities, B-BBEE level, and profile text now display correctly.
Key Changes
- •Claimed company intelligence pages no longer crash when rendering owner information.
- •Company owners' email, phone, and website are now displayed correctly on approved profiles.
Platform Impact
The company claim flow now completes successfully — approved claimants see their profile render fully instead of crashing.
AI assistants like ChatGPT, Gemini, Claude, and Perplexity can now read Tenders-SA pages as clean markdown. Every major public route serves an AI-optimised version, with rate limits that distinguish well-behaved bots from scrapers. A daily cost guardrail keeps bandwidth in check.
Key Changes
- •70+ public routes serve AI-optimised markdown to known AI bots — tenders, provinces, categories, blog, legislation, glossary, and more.
- •Well-behaved AI bots get 60 requests per minute; abusive scrapers are limited to 10.
- •A daily bandwidth cap monitors AI traffic and alerts admins if thresholds are exceeded.
Platform Impact
AI platforms can now discover, read, and cite Tenders-SA content. The site is a first-class data source for AI training and real-time answers, with safeguards against unexpected bandwidth costs.
Anonymous visitors (including AI crawlers) now get cached HTML from Cloudflare on repeat visits instead of triggering a full server render. Pro subscribers still see their full unlocked reports; free visitors see the locked default.
Key Changes
- •Company Intelligence and Forensic Analysis pages now serve cached content to anonymous repeat visitors — no server round-trip.
- •Pro subscribers continue to see the full report after a brief client-side upgrade.
Platform Impact
Repeat visits are served from Cloudflare's edge, reducing server load while keeping auth state correct for every user.
Tender detail pages are now cached instead of being rebuilt from the database on every visit. Blog, legislation, province, and category pages are served from Cloudflare's edge. AI rewrite jobs now run every 2 hours instead of every 15 minutes.
Key Changes
- •Tender detail pages load faster — served from cache instead of running a full database query on every visit.
- •Blog, legislation, province, and category pages served from Cloudflare edge cache.
- •AI summaries for new tenders appear within 2 hours (previously every 20 minutes).
Platform Impact
Faster page loads and lower platform costs. No visible change to what users see on any page.
After paying the R1,500 claim fee, company owners can now edit their internal Company profile from the dashboard. The public profile shows owner-provided information (contact details, B-BBEE level, capabilities) in an "Additional information from the company owner" section. Expired trials are reactivated at no extra charge.
Key Changes
- •Pay the R1,500 claim fee and get immediate dashboard access, even if your trial expired.
- •Edit your company's name, registration, tax, B-BBEE, industry, provinces, and capabilities from the dashboard.
- •Your public profile shows a new section with your contact details and company information.
Platform Impact
Company owners who pay the claim fee can now manage their public profile and keep their information current.
When a user pays the R1,500 Company Profile Claim fee via Paystack, the payment is now correctly reconciled. Previously, the webhook could create a phantom subscription instead of marking the claim as paid.
Key Changes
- •Paystack claim payments are now reliably reconciled — no more phantom subscriptions.
- •Closing the browser before returning to the success page no longer leaves claims stuck in pending.
Platform Impact
Claim payments via Paystack work end-to-end without manual intervention.
Clicking "Subscribe" on the pricing page was failing for Starter, Professional, and Enterprise plans with a Paystack "Invalid Amount Sent" error. This is now fixed — users can complete checkout end-to-end.
Key Changes
- •All three paid plans now load the Paystack checkout overlay correctly when you click Subscribe.
- •Prices remain unchanged at R250, R800, and R2,000 per month.
Platform Impact
Users can successfully start a Paystack subscription from the pricing page without errors.
Paystack replaces PayPal as the primary payment processor for all new transactions. New subscriptions, one-time product purchases, and claim payments now go through Paystack in South African Rand. Existing PayPal subscribers are unaffected.
Key Changes
- •New subscriptions use Paystack with ZAR pricing — no more USD conversion costs.
- •One-time product purchases and claim payments also use Paystack.
- •Existing PayPal subscribers continue on PayPal with no changes.
Platform Impact
All new payments are processed in ZAR through Paystack. Pricing has been reduced across most plans.
Tender Radar now has province-level pages for every category. You can browse all company profiles in a specific category and province combination. It's linked from the navigation menu, footer, and SA Tenders pages.
Key Changes
- •Province-level Tender Radar pages let you browse companies by category and location.
- •Tender Radar is now accessible from the navigation menu, footer, and SA Tenders hub.
Platform Impact
Easier discovery of companies by category and province, with search engine visibility for each combination.
All feature pages, the how-it-works guide, changelog, and intelligence feed now carry proper structured data. AI assistants can surface the 4-step HowTo process from how-it-works, understand changelog freshness, and cite the intelligence dataset.
Key Changes
- •Feature sub-pages now link to the platform's search engine identity for proper attribution.
- •How-it-works page now has a HowTo schema so Google can surface the 4-step process in search results.
- •Changelog page tells search engines when it was last updated.
- •Intelligence feed now described as a Dataset that AI assistants can cite.
Platform Impact
Better search engine understanding of these pages, enabling rich results and AI citation.
Blog posts now link to related tenders in their structured data. Legislation pages map each act to its regulator — National Treasury for PFMA, B-BBEE Commission for the BBBEE Act, CIDB for the CIDB Act — so search engines and AI assistants can answer "who regulates what".
Key Changes
- •Blog posts now reference relevant tenders in their structured data, connecting articles to procurement opportunities.
- •Legislation pages identify the regulator for each act, making it clear which body enforces each law.
Platform Impact
Search engines and AI assistants can now connect blog content to specific tenders and map procurement laws to their regulators.
Four improvements to the company profile claim flow: proof documents are saved reliably with a 10MB cap, the payment button says "Pay Now", the "Resume Claim" link in emails works correctly, and "Claim Under Review" emails no longer point to admin-only pages.
Key Changes
- •Proof-of-ownership documents are saved with a 10MB file size limit.
- •The payment button now says "Pay Now" with the price shown clearly.
- •Resume Claim links in emails now take you back to the correct step.
- •Claim Under Review emails no longer link to admin-only pages.
Platform Impact
Fewer stuck claims and clearer communication throughout the claim process.
The Publishers Hub, all 5 sector pages, and the developers page now use the same structured data system as the rest of the platform, with proper attribution to Tenders SA.
Key Changes
- •Publishers Hub pages are now correctly attributed to the platform in search engine knowledge graphs.
Platform Impact
More consistent search engine representation across the Publishers section.
Province pages, organisation-type filters (municipalities, SOEs, national departments), category sub-pages, and awards pages now carry richer structured data. AI assistants can answer "how many awards in each province" or "list municipalities" from typed data.
Key Changes
- •Province notice and cancellation pages now described as geographic areas in search data.
- •Municipality, SOE, and department filter pages now tagged as government organisation types.
- •Category sub-pages (closed, awarded, notices, cancellations) describe the category itself.
- •Awards pages expose a dataset AI assistants can cite for award statistics.
Platform Impact
Better search engine understanding of listing pages and AI assistants can answer questions about award statistics.
The home page now describes its stats as a Dataset and the platform as a SoftwareApplication. The pricing page exposes each plan as a typed Service with ZAR pricing, so AI assistants can answer "how much does Tenders SA cost" from structured data.
Key Changes
- •Home page now describes its live stats (active tenders, awards, companies) as a Dataset.
- •Pricing page exposes each plan as a Service with ZAR pricing — AI assistants can answer cost questions directly.
Platform Impact
Search engines and AI assistants get a complete picture of what Tenders SA is, what data it provides, and what it costs.
The Tenders SA organisation entity now carries full social profiles (Facebook, LinkedIn group, X), WhatsApp contact, and South Africa address. AI assistants can answer "how do I contact Tenders SA" from structured data.
Key Changes
- •Tenders SA brand entity now includes Facebook, LinkedIn group, and X profiles.
- •WhatsApp and email contact details available in structured data.
- •Publishers Hub pages migrated to the same XSS-safe structured data system.
Platform Impact
Google can build a complete knowledge panel for Tenders SA and AI assistants can answer contact and social questions.
Users who close the claim modal mid-flow can now return and pick up at the correct step — upload proof, pay, or awaiting review — instead of starting over. Rejected claims retain their full audit history.
Key Changes
- •Claim workflow now resumes from the correct step after a PayPal cancel, browser close, or network blip.
- •A "Resume your claim" prompt appears on your profile if you have an in-progress claim.
- •Rejected claims are no longer deleted on re-claim — admin review history is preserved.
- •The "Verified Profile" badge now only appears for admin-approved claims.
Platform Impact
Less friction in the R1,500 claim flow — no more losing your place or having to re-submit from scratch.
A new admin claims dashboard lets admins find, filter, review, approve, and reject pending claim requests. Claimants receive emails on every state change. Approved claims unlock a profile editor.
Key Changes
- •New admin claims page with Pending / Approved / Rejected tabs, filters, and pagination.
- •Claimants receive emails when a claim is received, approved, or rejected.
- •Admins receive a notification when a new claim needs review.
- •Approved claims unlock a "Manage this profile" dashboard page.
Platform Impact
Completes the claim feature — admins can review claims, and users who pay the R1,500 fee get verified profile access.
Company intelligence profiles now expose their top awarded categories and most frequent awarding bodies in structured data. A new DynamicSchema wrapper makes it easy to add similar data to other page types.
Key Changes
- •Company profiles show their top awarded categories and most frequent awarding bodies in search engine data.
- •AI assistants can now answer "what does this company do" or "who buys from this company" from structured data.
Platform Impact
Better search engine understanding of each company's specialisation and customer base.
Awarding organisations on tender detail pages now expose a "Tender Enquiries" contact point with phone numbers in standard international format.
Key Changes
- •Tender detail pages now show structured contact details for bid enquiries.
- •Phone numbers are normalised to international format for cross-market compatibility.
Platform Impact
AI assistants can cite direct procurement contact information from tender pages.
Every tool page — B-BBEE calculator, CIDB grade calculator, compliance checklist, preparation planner, readiness assessment, AI proposal generator, value estimator, JV calculator, forensic analysis, company lookup, heatmap, and company intelligence — now carries proper structured data.
Key Changes
- •All 12 tool pages now share the same search engine identity as the rest of the platform.
- •Tool pages with FAQ content now surface those questions in search results.
- •The heatmap no longer showed a fictional rating — it now describes real data.
Platform Impact
Tools section is now fully discoverable with accurate descriptions, pricing, and structured data.
Tender detail pages now show a progress indicator on the documents panel — "Reading the tender document", "Compliance review", "Bid-ready summary" — so you can see at a glance which documents have been analysed.
Key Changes
- •Document analysis progress shown per document: reading → compliance review → bid-ready summary.
- •Status is explained in plain procurement language, not technical terms.
Platform Impact
Users can see at a glance which documents are ready for bid preparation and which are still being analysed.
Clicking "Calculate Matching Score" previously returned 0% if any eligibility gate failed. You now see a partial score from the other 12 matching factors plus the full breakdown, so you can identify which dimension to improve.
Key Changes
- •Partial score shown even when eligibility criteria fail — see which other factors still match.
- •Full factor breakdown lets you identify weak areas like industry codes, BBBEE, or province.
Platform Impact
More informative matching scores — users can see which specific areas to improve rather than getting a flat 0%.
Every tender-related page now shares the same Organisation and Website identity in search engine data, creating a unified entity. XSS vulnerabilities in JSON-LD rendering have been closed across all tender routes.
Key Changes
- •Every tender page now contributes to a single Tenders SA entity in Google's knowledge graph.
- •Breadcrumbs are now consistent and deduplicated across tender detail pages.
Platform Impact
Stronger brand signals across all tender routes and better search engine understanding of site structure.
Company intelligence pages now use the correct Schema.org paywall markup so Google understands which content is behind the subscription, resolving indexing issues for premium pages.
Key Changes
- •Paywalled content on company intelligence pages now properly marked in structured data.
Platform Impact
Company intelligence pages should now be properly indexed by Google while maintaining the paywall for non-subscribers.
Fixed a bug where automated email flows were skipping the primary email provider and falling through to more expensive backups. All 60+ automated email flows now correctly try providers in the intended order.
Key Changes
- •All automated email flows now route through providers in the correct priority order.
- •Admin dashboard no longer shows spurious email connection errors on cold start.
Platform Impact
More reliable email delivery with correct provider prioritisation.
The AI Document Analysis card on tender detail pages now uses the same green accent, gradient header, and branded styling as the rest of the page. Evaluation criteria headings now stack vertically for easier scanning.
Key Changes
- •Document analysis card now matches the page's green accent theme.
- •Evaluation criteria headings sit above their content instead of cramped beside it.
Platform Impact
Consistent visual experience — the document analysis section looks like it belongs on the page.
When multiple tender documents restate the same information, duplicates are now suppressed. Each section shown on the page is unique across the entire tender — even when five documents carry the same paragraph.
Key Changes
- •Duplicate analysis sections across documents are now automatically suppressed.
- •First document to surface content wins; later duplicates are hidden.
Platform Impact
Cleaner reading experience — no more seeing the same paragraph multiple times under different headings.
All SEO metadata is now generated through a single, orchestrated pipeline with provider failover. Tender page descriptions are no longer at risk of being silently overwritten by inline AI on the request path.
Key Changes
- •SEO generation now uses the same AI orchestration as every other AI feature on the platform, with automatic provider failover.
- •Tender page metadata is no longer generated on the request path — reduces risk of broken or off-topic descriptions.
Platform Impact
More reliable, consistent SEO metadata across all tender pages.
The API status indicator in the navigation bar now fetches metrics through updated backend routes. No visible change for users.
Key Changes
- •API status indicator now powered by updated infrastructure.
Platform Impact
Continued accurate API health display with no user-facing changes.
All outbound email now routes through Amazon SES first, with SendPulse and Resend as automatic fallbacks. This reduces email delivery costs while maintaining reliability with a 3-provider fallback chain.
Key Changes
- •Amazon SES is now the primary email provider for all notifications.
- •SendPulse and Resend remain as automatic fallbacks if SES is unavailable.
- •No user-facing changes — email notifications work exactly as before.
Platform Impact
Lower email delivery costs with improved reliability through a 3-provider fallback chain.
Tender document analysis now classifies content into 15+ section types, up from 7. Each section shows which source document it came from, so you can trace every requirement back to its original file.
Key Changes
- •Document analysis now recognises 15+ section types instead of 7 — more precise browsing of tender requirements.
- •Every analysis section shows its source document name for full provenance.
Platform Impact
Richer, more accurate document analysis with clear attribution to source documents.
All existing tender documents with extended analysis sections now have professionally rewritten text. New documents get the same treatment on ingestion.
Key Changes
- •All existing extended analysis sections professionally rewritten for readability.
- •New documents are rewritten on ingestion — no manual backfill needed going forward.
Platform Impact
Consistent, professional-quality analysis text across all tenders.
Tender extraction was failing mid-write with a Prisma error. The fix lets live document ingestion complete end-to-end without crashing.
Key Changes
- •Live document extraction no longer crashes during the save step.
- •New tender documents now ingest end-to-end as designed.
Platform Impact
New tender documents are reliably ingested without errors.
Tender document downloads now use Cloudflare Workers to fetch and cache files, with the main app providing a resilient download URL.
Key Changes
- •Document downloads now use a Cloudflare Worker for caching and serving.
- •Maintains a fallback path so documents are always accessible.
Platform Impact
More reliable document downloads with edge caching for faster delivery.
A new document retrieval Worker caches tender documents at the Cloudflare edge, reducing load on government portals and speeding up downloads for users.
Key Changes
- •Documents are cached at the edge after first fetch — subsequent downloads are faster.
- •Reduces dependency on government portal availability.
Platform Impact
Faster document downloads and less reliance on potentially unreliable government sources.
Document download URLs now prefer R2-backed Cloudflare storage over original government source URLs. Source URLs are only used as a fallback.
Key Changes
- •Document downloads prefer cached R2 storage over original government URLs.
- •Government source URLs are used only as emergency fallback.
Platform Impact
More reliable document access even when government portals are down.
The Worker's database schema now uses the correct table layout for document metadata, matching the application's expectations.
Key Changes
- •Document metadata stored with consistent schema across Worker and app.
Platform Impact
Reliable document metadata storage without data loss or mapping errors.
R2 storage now uses a standardised key format: government tender ID + original document blob name. No more random or generated keys.
Key Changes
- •Documents stored with consistent, predictable keys based on original tender and document IDs.
Platform Impact
Documents are always findable at a predictable location regardless of how they were ingested.
A repair process has fixed existing document rows that had incorrect or broken URLs, populating missing metadata from original sources where possible.
Key Changes
- •Existing document records repaired with correct URLs and metadata.
Platform Impact
Documents that previously had broken download links now work correctly.
The document ingestion pipeline now repairs broken source URLs by fetching fresh metadata from government portals, populating the correct download links.
Key Changes
- •Document ingestion now repairs broken government URLs by re-fetching metadata.
- •Correct download links are populated automatically.
Platform Impact
New documents ingested with correct, working download URLs from the start.
The document download endpoint now resolves R2-backed URLs first. If a document exists in R2 cache, it serves from there before falling back to the original government source.
Key Changes
- •Document downloads now prefer cached R2 storage.
- •Government source URLs are used only if R2 is unavailable.
Platform Impact
More reliable downloads — works even when government portals are down.
Document download buttons on tender detail pages now route through the download URL API, which resolves the best available storage location.
Key Changes
- •Download buttons now use the API endpoint for URL resolution.
Platform Impact
More reliable document downloads from tender detail pages.
A new privacy policy page explains what data we collect, how we use it, and your rights under South African law.
Key Changes
- •New privacy policy page with clear explanation of data practices.
Platform Impact
Users can understand their privacy rights and how their data is handled.
A new terms of service page outlines the rules for using the platform, subscription terms, and liability provisions.
Key Changes
- •New terms of service page with clear usage rules.
Platform Impact
Users can review the legal terms governing platform use.
Company enrichment data now includes director names and details, enabling director-level analysis on company profiles.
Key Changes
- •Company profiles now include director information from CIPC data.
Platform Impact
Richer company profiles with director-level detail.
Restricted supplier entries from the National Treasury list are now matched against CIPC-registered companies. When a match is found, the restricted supplier status appears on the company's intelligence profile.
Key Changes
- •OCPO restricted supplier entries matched against registered South African companies.
- •Matching companies show restricted supplier status on their intelligence profile.
Platform Impact
Tighter integration between government restricted supplier data and company profiles.
The daily restricted supplier sync now checks whether the PDF has changed before processing. Unchanged PDFs are skipped entirely, reducing load and avoiding unnecessary writes.
Key Changes
- •Daily restricted supplier sync skips processing when the PDF hasn't changed.
Platform Impact
Faster, more efficient daily syncs with no unnecessary database writes.
The PDF URL used for restricted supplier sync can now be configured from the admin settings, with a sensible default if not set.
Key Changes
- •Admin can configure the restricted supplier PDF URL via settings.
Platform Impact
Admin control over data source without code changes.
Sync metadata now tracks when each restricted supplier source was last updated, so the platform can show data freshness per source.
Key Changes
- •Per-source sync timestamps tracked for data freshness indicators.
Platform Impact
Users can see how recent each restricted supplier source is.
The restricted supplier banner on Company Intelligence profiles now shows when each data source was last checked.
Key Changes
- •Restricted supplier status banner shows freshness per data source.
Platform Impact
Users can assess how current the restricted supplier data is for each source.
Organisation and province detail pages now show a sidebar listing restricted suppliers tied to that body or local authority.
Key Changes
- •Organisation pages show restricted suppliers linked to that body.
- •Province pages show restricted suppliers linked to local authorities in that province.
Platform Impact
Cross-reference restricted suppliers by organisation and location.
The public API now supports querying restricted suppliers by source and authorised body.
Key Changes
- •Public API supports source and authorised body filters for restricted suppliers.
Platform Impact
API consumers can query restricted supplier data with flexible filters.
CIPC company registration data is now enriched and stored alongside tender data, enabling company lookups, director analysis, and cross-referencing with restricted supplier lists.
Key Changes
- •CIPC company data enriched and available for cross-referencing.
Platform Impact
Foundation for company intelligence features — lookups, director analysis, and compliance checks.
Admins can now configure data source URLs and sync settings from a dedicated admin page.
Key Changes
- •New admin settings page for configuring data sources.
Platform Impact
Admin control over platform data sources without code changes.
The admin dashboard now shows Amazon SES connection status and diagnostics for easier troubleshooting.
Key Changes
- •Admin dashboard shows SES email provider status and diagnostics.
Platform Impact
Easier troubleshooting of email delivery issues.
The admin dashboard now shows diagnostics for all email providers (SES, SendPulse, Resend) at a glance.
Key Changes
- •Admin dashboard shows health status for all email providers.
Platform Impact
Easier monitoring of email infrastructure health.
All cron job endpoints now validate a shared secret before executing, preventing unauthorised invocation.
Key Changes
- •All scheduled job endpoints require authentication via shared secret.
Platform Impact
Internal cron jobs are protected from unauthorised external invocation.
Cron job endpoints have been added to the middleware's public route whitelist so they can be reached without session authentication.
Key Changes
- •Cron endpoints accessible without user session (authenticated via secret).
Platform Impact
Internal scheduled jobs can run without requiring a user session.
A daily cron job downloads the National Treasury OCPO restricted supplier PDF, parses it, and syncs entries to the database. Changes detected via PDF hash comparison to avoid unnecessary processing.
Key Changes
- •Daily sync of OCPO restricted supplier list from National Treasury PDF.
- •Change detection via PDF hash avoids unnecessary processing.
Platform Impact
Restricted supplier data stays current with daily refreshes.
The OCPO restricted supplier PDF URL can now be changed from the admin dashboard, with automatic fallback to the default URL.
Key Changes
- •Admin can configure the restricted supplier PDF URL from the dashboard.
- •Default URL used if no custom URL is configured.
Platform Impact
Admin control over data sources without requiring code deployments.
Restricted supplier entries are now automatically classified by severity (critical, high, medium) based on the restriction reason, helping users triage the most important restrictions.
Key Changes
- •Restrictions classified as critical, high, or medium based on the reason.
- •Critical restrictions (corruption, fraud, collusion) flagged prominently.
Platform Impact
Users can focus on the most serious restrictions first.
Restricted supplier entries are now matched to CIPC companies using fuzzy name matching, catching companies with slight name variations.
Key Changes
- •Fuzzy name matching catches companies with slight spelling differences.
Platform Impact
Better match rates for restricted suppliers whose names don't exactly match CIPC records.
Award cards across the platform now show a red "Restricted" or green "Verified" badge next to supplier names, giving an immediate visual indicator of supplier risk.
Key Changes
- •Award cards show restricted supplier badges next to supplier names.
- •Red badge for restricted, green badge for verified clean.
Platform Impact
Users can assess supplier risk at a glance while browsing awards.
When a winning supplier has active restrictions, the award detail page now shows a warning card with restriction details — type, period, and authority.
Key Changes
- •Award detail pages show a warning card when the winning supplier is restricted.
- •Warning includes restriction type, period, and the authority that issued it.
Platform Impact
Users can immediately see if a winning supplier carries compliance risk.
Company name matching across the platform now normalises legal suffixes consistently — Pty Ltd, Ltd, Inc, CC, NPC, SOC Ltd — so variations don't prevent correct matches.
Key Changes
- •Company name normalisation now standardises legal suffixes across all matching.
Platform Impact
Better match rates when company names differ only in legal suffix formatting.
Restricted supplier entries are now stored with normalised names at write time, improving matching consistency.
Key Changes
- •Normalised names stored during sync for consistent matching.
Platform Impact
More consistent and accurate matching of restricted suppliers to companies.
SEO metadata is now generated through a dedicated pipeline that runs after tender analysis, rather than inline during page requests.
Key Changes
- •SEO metadata generated after document analysis, not during page requests.
Platform Impact
More reliable SEO data generation without impacting page load times.
Tender documents are now automatically analysed for key information — requirements, evaluation criteria, compliance needs, and bid preparation guidance.
Key Changes
- •Automatic AI analysis of tender documents for key information extraction.
Platform Impact
Users get AI-generated analysis on tender documents without manual effort.
Every new tender now gets automatic AI analysis of its documents, extracting requirements, compliance needs, and evaluation criteria.
Key Changes
- •Automatic analysis pipeline for every new tender's documents.
Platform Impact
All new tenders come with AI-generated document analysis from day one.
Tender detail pages now show a progress indicator for document analysis, so users know when to check back for results.
Key Changes
- •Progress status shown for tender document analysis on detail pages.
Platform Impact
Users can see when analysis is in progress and when it's complete.
A backfill pipeline scans for tenders that missed analysis and processes them, ensuring full coverage.
Key Changes
- •Backfill pipeline catches tenders that missed initial analysis.
Platform Impact
All eligible tenders eventually get document analysis, even if initial processing was skipped.
The notification system now supports sending via multiple email providers with automatic fallback, improving delivery reliability.
Key Changes
- •Notifications automatically fall back to alternative email providers if primary is unavailable.
Platform Impact
More reliable notification delivery.
Users can now configure alert preferences tied to their subscription plan, controlling which notifications they receive.
Key Changes
- •Alert preferences configurable per subscription plan.
Platform Impact
Users control which notifications they receive based on their plan.
A new email template rendering engine supports dynamic content, sequences, and multi-provider delivery.
Key Changes
- •Email templates support dynamic content and scheduled sequences.
Platform Impact
Consistent, professional email communications with support for automated sequences.
Users can receive daily or weekly email digests summarising new tenders, awards, and changes relevant to them.
Key Changes
- •Daily and weekly email digests with personalised tender and award summaries.
Platform Impact
Users stay informed without checking the site constantly.
Restricted supplier severity rules updated to better distinguish critical restrictions (fraud, corruption) from medium ones.
Key Changes
- •Improved severity classification for restricted supplier entries.
Platform Impact
More accurate risk flags on company profiles.
Matching between restricted suppliers and CIPC companies now uses multiple strategies for maximum coverage — registration number, exact name, and fuzzy name.
Key Changes
- •Three-tier matching strategy for maximum coverage.
Platform Impact
More restricted suppliers correctly matched to their CIPC company records.
A new API endpoint lets you look up CIPC company enrichment data by name or registration number.
Key Changes
- •API endpoint for CIPC company lookup by name or registration number.
Platform Impact
Programmatic access to company enrichment data.
The admin claims dashboard now lets admins preview proof documents inline before approving or rejecting claims.
Key Changes
- •Admin can preview proof documents directly in the claims dashboard.
Platform Impact
Faster, more informed claim review process.
Claim proof documents are uploaded securely with file type validation and size limits, stored safely on the server.
Key Changes
- •Secure file upload with PDF/PNG/JPEG validation and 10MB cap.
Platform Impact
Safe and reliable document upload for the claim process.
Users can now reset their password through a secure email-based flow.
Key Changes
- •Password reset via email with secure token.
Platform Impact
Users can recover access to their accounts securely.
New users can register with email and password, receiving a verification email to confirm their address.
Key Changes
- •Email registration with verification link.
Platform Impact
Secure account creation with verified email addresses.
A complete email verification flow ensures all user accounts have verified email addresses before accessing restricted features.
Key Changes
- •Email verification required before accessing certain features.
Platform Impact
Improved account security and communication reliability.
Authentication now uses HTTP-only cookies validated at the edge, replacing client-side token storage for better security.
Key Changes
- •JWT authentication now handled via secure HTTP-only cookies at the edge.
Platform Impact
More secure authentication — tokens are never exposed to client-side JavaScript.
The authentication system now uses secure, HTTP-only cookies for token storage with 7-day lifespan, SameSite=Lax, and Secure attributes.
Key Changes
- •Authentication tokens stored as secure HTTP-only cookies.
- •7-day session with SameSite and Secure protections.
Platform Impact
Defense-in-depth for authentication — tokens can't be stolen by XSS attacks.
Platform database infrastructure initialised with Prisma ORM for tender data, awards, organisations, and user data.
Key Changes
- •Database infrastructure established for core platform data.
Platform Impact
Foundation for all platform features.
Platform migrated from MySQL to PostgreSQL for better performance, advanced features (pg_trgm, full-text search), and lower hosting costs.
Key Changes
- •Database migrated from MySQL to PostgreSQL.
- •PostgreSQL-specific features available: fuzzy matching, full-text search, JSON support.
Platform Impact
Better performance, lower costs, and access to advanced database features.
Database indexes created for faster tender, company, and award searches.
Key Changes
- •Optimised database indexes for faster searches.
Platform Impact
Faster search results across the platform.
Tender detail pages now load component data in parallel instead of sequentially, reducing page load time.
Key Changes
- •Parallel data fetching for tender detail pages.
Platform Impact
Faster tender detail page loads.
Redis caching added for frequently accessed platform data (tender counts, company lookups, restricted supplier status) to reduce database load.
Key Changes
- •Redis caching for frequently accessed platform data.
Platform Impact
Faster responses for commonly requested data with reduced database load.
Incremental Static Regeneration caching applied to tender detail pages and content pages for faster repeat visits.
Key Changes
- •ISR caching for tender detail and content pages.
Platform Impact
Faster load times for repeat visitors to cached pages.
A live extraction pipeline now processes tender documents as they are published, running AI analysis immediately.
Key Changes
- •Real-time document analysis as new tenders are published.
Platform Impact
New tenders have analysis available soon after publication.
Document analysis now uses an AI orchestrator that tries multiple AI providers in sequence, ensuring analysis completes even if one provider is unavailable.
Key Changes
- •AI document analysis with automatic provider failover.
Platform Impact
More reliable document analysis with built-in redundancy.
Document analysis upgraded to use the latest generation of AI models for better extraction quality.
Key Changes
- •Upgraded AI models for document analysis.
Platform Impact
Better quality analysis with more accurate information extraction.
A dedicated rewrite service converts raw tender data into clear, professional descriptions suitable for public display and SEO.
Key Changes
- •Professional rewrite of tender descriptions for public display.
Platform Impact
Clearer, more professional tender descriptions across the platform.
Tender descriptions are now rewritten with structured sections that highlight key information like requirements, deadlines, and compliance needs.
Key Changes
- •Smarter section-based rewriting for better tender descriptions.
Platform Impact
More structured, informative tender descriptions.
A matching engine now scores company profiles against tender requirements based on industry codes, location, financial capability, and more.
Key Changes
- •Matching engine scores companies against tender requirements.
Platform Impact
Users can see how well their company matches available tenders.
Tender pages now show a "Calculate Matching Score" button that evaluates your company against the tender requirements.
Key Changes
- •"Calculate Matching Score" feature on tender pages.
Platform Impact
Users can immediately assess their fit for any tender.
The matching engine now considers 12 factors including industry codes, BBBEE, province, value, experience, qualifications, capacity, and document readiness.
Key Changes
- •Matching score considers 12 factors for a comprehensive assessment.
Platform Impact
More accurate matching scores with clear factor breakdown.
The matching engine now returns partial scores even when eligibility fails, showing users which specific criteria they don't meet and which they do.
Key Changes
- •Partial matching scores shown when some eligibility criteria fail.
Platform Impact
Users can see their strengths even if they don't meet all requirements.
Matching algorithm uses weighted penalties and sensitivity analysis to produce more nuanced scores.
Key Changes
- •More nuanced matching with weighted factors.
Platform Impact
More accurate, balanced matching scores.
Province matching now handles city names, regional aliases, and national scope — so "Johannesburg" correctly matches Gauteng, and "National" matches all provinces.
Key Changes
- •Province matching handles city aliases and national scope.
Platform Impact
More accurate location-based matching.
Company registration numbers are now validated for correct format when entered on the platform.
Key Changes
- •Validation for company registration number format.
Platform Impact
Cleaner, more consistent company data.
Companies can now be looked up by name or registration number, with the system normalising names for better matching.
Key Changes
- •Company lookup by name or registration number.
Platform Impact
Easier to find and reference companies on the platform.
Company intelligence data now served through a dedicated query service with 1-hour Redis caching for fast repeat lookups.
Key Changes
- •Company intelligence data cached with Redis for faster lookups.
Platform Impact
Faster company profile loads, especially for repeat visits.
Company intelligence profiles now show comprehensive information including tender awards, CIPC enrichment data, director details, and restricted supplier status.
Key Changes
- •Company profiles with tender awards, CIPC data, directors, and compliance status.
Platform Impact
One-stop company research tool for procurement professionals.
All 12 tool pages migrated from raw JSON-LD script blocks to the XSS-safe StructuredData component.
Key Changes
- •Tool pages use XSS-safe structured data rendering.
Platform Impact
Eliminates a class of stored XSS vulnerabilities across all tool pages.
Home, pricing, and tools pages now share the same search engine identity bundle as the rest of the platform.
All 24 tender route templates now share the same Organisation and Website identity bundle.
Key Changes
- •All tender pages now share a unified search engine identity.
Platform Impact
Consistent brand entity across all tender content in search results.
A new DynamicSchema component provides a typed, safe wrapper for page-specific structured data, making it easier to add without raw JSON-LD.
Key Changes
- •New DynamicSchema component for safe, typed structured data.
Platform Impact
Easier and safer to add page-specific structured data going forward.
Company profiles now expose their top categories and awarding bodies in structured data.
Key Changes
- •Company profiles show their specialisation and clients in search engine data.
Platform Impact
Search engines understand what each company does and who they work for.
Company intelligence pages now correctly signal paywalled content to Google.
Key Changes
- •Paywalled content properly marked in structured data.
Platform Impact
Google properly indexes company profiles while respecting the paywall.
Tender detail pages now show bid enquiry contact details as a proper ContactPoint in structured data.
Key Changes
- •Bid enquiry contact details available in structured data.
Platform Impact
Search engines and AI can surface tender contact information directly.
The Tenders SA organisation entity now includes Facebook, LinkedIn, X profiles, WhatsApp contact, and South Africa location in structured data.
Key Changes
- •Organisation entity now includes social profiles, contact, and location.
Platform Impact
Google can build a complete knowledge panel for Tenders SA.
All AI markdown mirrors and site pages now use the same Tenders SA publisher citation in structured data.
Key Changes
- •Consistent publisher attribution across all content.
Platform Impact
Clear, consistent authorship signals for search engines and AI.
AI-optimised markdown pages now include a publisher citation JSON-LD block.
Key Changes
- •AI content carries publisher attribution in structured data.
Platform Impact
AI platforms correctly attribute content to Tenders SA when citing.
JSON feeds for tenders and awards, plus JSON sitemaps for AI aggregators.
Key Changes
- •JSON feeds and sitemaps for AI platforms and feed readers.
Platform Impact
AI platforms and aggregators can consume Tenders-SA data programmatically.
Standard llms.txt and llms-full.txt files help AI platforms discover and understand the site structure.
Key Changes
- •Standard AI discovery files for LLM platforms.
Platform Impact
AI platforms can easily discover all site content.
A public AI Info API returns the full entity taxonomy (41 content types), JSON Feed URLs, and LLMs.txt references for AI platforms.
Key Changes
- •Public API for AI platforms describing all content types and feeds.
Platform Impact
AI platforms can programmatically discover everything available on the site.
70+ public routes serve AI-optimised markdown at /_ai/* paths for AI platform consumption.
Key Changes
- •70+ AI-optimised content mirrors available at /_ai/* paths.
Platform Impact
AI platforms get clean, readable content instead of JavaScript-heavy pages.
16+ AI bot families detected at the edge and served optimised content with appropriate rate limits.
Key Changes
- •AI bot detection with 16+ recognised bot families.
Platform Impact
Well-behaved AI bots get good access; scrapers are limited.
robots.txt updated with specific rules for 10+ AI crawler types, blocking abusive scrapers from sensitive paths.
Key Changes
- •Updated robots.txt with specific AI crawler rules.
Platform Impact
Better crawling behaviour — AI bots directed to content, away from API and admin paths.
Sitemap.xml now includes all page types with appropriate priorities and update frequencies.
Key Changes
- •Complete sitemap with all page types and priorities.
Platform Impact
Better search engine discovery of all pages.
Questions about these updates?
Our team is dedicated to building the best procurement technology for South Africa. If you have feedback or questions about any change, please reach out.
Contact Support