-
-
Landing Page
-
-
Tender lists
-
Description + AI service + Translation
-
AI Chatbot that directly interacts with all your data + context of tender
-
Eligibility checker - comparing your company profile, reputation vs tender details
-
AI Summary of Tender + Translation
-
Proposal curator directly within the platform
Inspiration
Late-night browsing through Malaysian tender packs and copy pasting contents + manual download of documents into Word made one thing painfully clear: the procurement process is broken for SMEs in Malaysia. Tender documents are buried in Malay-only PDFs, scattered across portals, and laced with hidden eligibility tables. We envisioned Tenderly as the one-stop workspace that scrapes those packs, translates them, tells a supplier “you’re 82 % eligible,” drafts a compliant proposal, and seals the submission on-chain—so honest contractors can finally compete on merit.
We don't just help you find proposals.. We help you WIN them
What it does
- Scrape → Structure – pulls tender bundles, stores files in Supabase Storage, writes clean JSON metadata to Postgres.
- Translate – seamless Malay ↔ English via Lingo.dev.
- AI Summary & Eligibility – GPT-4o with RAG explains each tender and scores your company profile against every requirement.
- Proposal Wizard – one-click draft (cover letter, pricing sheet, Gantt chart).
- Algorand Attestation – hashes each submitted PDF and records the tx-id, creating a tamper-proof supplier reputation.
How we built it
- Frontend – Next.js 15, TailwindCSS, shadcn/ui, SWR hooks, React Context, all inside Bolt.new.
- Backend – Supabase Auth, Postgres (RLS), Storage, Edge Functions for heavy PDF parsing.
- AI / Translation – OpenAI GPT-4o for RAG tasks; Lingo.dev for bilingual accuracy.
- Blockchain – Algorand via Nodely endpoints for immutable attestations.
- Dev tooling – seed-tenders.js for demo data, CI + snapshot tests to catch React import mishaps.
Challenges we ran into
- Browser sandbox blocked
pdf-parse; fixed by off-loading to a Supabase Edge Function. - Duplicate filenames in tender packs; solved with deterministic keys
scraper/<tenderId>/<originalName>. - A single mis-export of
TenderCardcrashed the feed minutes before demo; CI now enforces import sanity. - Prompt-tuning to stop GPT hallucinations across bilingual procurement jargon.
- Algorand mainnet deployment didnt work, and we had to revert to our previous build
Accomplishments we’re proud of
- Turned raw tender folders into structured, AI-ready JSON in under a week.
- Live eligibility scoring that updates the moment a supplier uploads a new cert.
- Polished multi-page UI that loads on 3 G—and built entirely in Bolt.
- Building an industry-ready web app within a month!
What we learned
Grounding prompts with exact snippets kills hallucinations, procurement Malay needs a curated translation corpus, and robust testing saves launches. Most SMEs care less about AI magic than about a verifiable audit trail proving fair evaluation.
What’s next for Tenderly
- Nightly full-portal scraper for ePerolehan and state sites.
- Evaluator dashboard for side-by-side bid comparison.
- Mobile push alerts for tenders that match saved profiles.
- RevenueCat paywall for analytics & multi-company workspaces.
- Public API so ERP tools can pull tender status and on-chain attestations.
Built With
- algorand
- auth
- bolt.new
- date-fns
- docker
- edge
- edge-functions)-openai-gpt-4o-for-rag
- eligibility-scoring-lingo.dev-translation-api-algorand-on-nodely-endpoints-for-notarisation-swr-/-axios-data-fetching-lucide-react-icon-set-date-fns
- functions
- gpt-4o
- lingo.dev
- lucide-react
- next.js
- nodely
- openai
- postgresql
- proposal-drafting
- react
- react-hook-form
- shadcn/ui
- storage
- supabase
- swr
- tailwindcss
- zod
Log in or sign up for Devpost to join the conversation.