by Neatlife
BidCrest
Find the contract. Build the bid. Win the work.
Nigeria’s tender-to-invoice workspace for servicing companies — bids, quotes, contracts and compliance in one place
5
Live contracts
8
Listed companies
8
Issuer packs
Live tender boardcontracts open for bidding, updated for you
Twice-weekly alertscontracts in your inbox every Mon & Thu
Company directorybe found by the clients already searching
8 issuer bid packsSeplat, Shell, Chevron, NNPC, NLNG & more
Auto letterhead & watermarkevery page branded, signed, submission-ready
E-signature on every pagesign once, applied throughout
Quotations & proformaspriced, professional, out the same day
Purchase orders & invoicesget the paperwork right, get paid faster
Contracts & NDAsNigerian-law drafts ready to sign
Company profile builderthe profile every bid asks for
NDPA & NCDMB checkerfind the fatal flaws before evaluators do
Shared company libraryupload CAC and certs once, reuse everywhere
Export to PDF or Worda real bid folder in one click
Live tender boardcontracts open for bidding, updated for you
Twice-weekly alertscontracts in your inbox every Mon & Thu
Company directorybe found by the clients already searching
8 issuer bid packsSeplat, Shell, Chevron, NNPC, NLNG & more
Auto letterhead & watermarkevery page branded, signed, submission-ready
E-signature on every pagesign once, applied throughout
Quotations & proformaspriced, professional, out the same day
Purchase orders & invoicesget the paperwork right, get paid faster
Contracts & NDAsNigerian-law drafts ready to sign
Company profile builderthe profile every bid asks for
NDPA & NCDMB checkerfind the fatal flaws before evaluators do
Shared company libraryupload CAC and certs once, reuse everywhere
Export to PDF or Worda real bid folder in one click
Marketplace
Live contracts open for bidding, company directory, announcements, and paid listings. Contracts emailed to subscribers every Monday & Thursday.
Enter marketplace
Bid workspace
Prepare compliant tender documents and professional quotations — Seplat, Shell, Chevron, NNPC, NLNG & more — with auto letterhead, watermark and e-signature on every page.
Open bid & quote workspace
Business Desk
Invoices, receipts, purchase orders, contracts, board resolutions and company profiles. Everything else your business sends.
Open office documents
© 2026 Neatlife Ltd — Software Solutions Company, Port Harcourt, Nigeria
BidCrest is a product of Neatlife Ltd  •  RC No: [add after CAC registration]
Bid & Quote Workspace
What would you like to prepare?
Bid preparation
Tender documents per issuer — Seplat, Shell, Chevron, NNPC, NLNG & more. Auto letterhead, watermark, e-signature.
Quote preparation
Standard quotations, proforma invoices, service quotes, LPOs, RFQ responses. Fill and export as PDF or Word.
Business Desk
Invoices, purchase orders, contract drafts and company profiles. Everything else your business sends.
Step 1 — Which company issued this tender?
Every client structures their bid pack differently. Pick the issuing company and BidCrest loads their exact form set — Seplat's Forms A–I, Shell's Attachments, NNPC's Procurement-Act forms, NLNG's Ariba envelopes, and so on. Pick Generic for any other client.
Where tenders are published (bookmark these):
• NipeX — all upstream oil & gas ITTs (Seplat, SPDC, Chevron, MPN, NNPC E&P, Renaissance…): nipex-ng.com → Current Opportunities
• NJQS vendor login (check your pre-qualification status): vms.nipex.org/login
• NLNG — SAP Ariba sourcing: nlng.com (Tenders/Suppliers section)
• Government MDAs — Bureau of Public Procurement open contracting: nocopo.bpp.gov.ng
• Aggregators — etenders.com.ng, publicprocurement.ng
Tender setup
These details automatically populate the header and footer of every document in this workspace — exactly like a real ITT response.
No custom image
"Bidder logo" auto-uses YOUR logo from slot 1 above (the applying company) — faded in the page centre. Or upload any custom image.
Upload signature
PNG with transparent background
works best. It's an e-document —
your scanned signature signs every page.
Upload logo
Top of the header stack —
small but recognizable.
Upload logo
Sits under yours — represents both
companies in the contract.
— or pick a default oil & gas logo —
Setup completeness check
Everything filled here appears automatically on every page. Run this check before opening your documents.
Client templates — Nigerian contract issuers
Click any client to pre-fill setup with their name and typical ITT reference format. Oil & gas operators plus other big contract-issuing organisations in Nigeria.
Oil & gas operators
Other major contract issuers
Documents in this workspace
Each requirement is a separate page/document — exactly like a real bid folder. Click any card to open and fill it.
Tender forms
Appendices
Tender opportunities — open for bidding in Nigeria
Track live ITTs here. Click Start bid on any opportunity and BidCrest loads that issuer's form pack with the title and reference pre-filled. Sample entries are illustrative — replace them with real adverts from the portals below.
Twice-weekly contracts email: every Monday & Thursday at 7:00am the contracts on this board are emailed automatically to subscribers.
Automatic portal feed (NipeX/NOCOPO) activates with the hosted backend — code is ready in the tender-feed folder.
Find a servicing company
Search registered servicing companies by name, service, or category. Companies with the Listed badge are paid, verified members of the BidCrest directory.
Create a post Admin — you
Announcements, tender tips, deadline reminders — visible to everyone on the site.
Latest posts
List your servicing company
Get found by clients searching the directory and receive the twice-weekly contracts email. Choose a plan below — paid securely via Paystack.
MOST FLEXIBLE
₦11,999 / quarter
Billed every 3 months • cancel any quarter
  • Listed in BidCrest directory
  • Twice-weekly contracts email
  • Removable any time
BEST VALUE — SAVE 20%
₦38,000 / year
One payment • ₦3,167/month effective
  • Everything in Quarterly
  • Priority placement in directory
  • Annual certificate of listing
Secured by Paystack — card details never touch BidCrest servers. Transactions are encrypted and processed by Paystack's PCI-DSS certified infrastructure.
8 servicing companies already listed. Be found by the clients searching right now.
By paying you agree to the Terms of Service and Refund Policy. Quarterly listing renews every 90 days; cancel any time.
Compliance checker
Answer honestly — this checks your company against the requirements Nigerian tender evaluators and regulators actually verify, plus your NDPA/NDPR data-protection duties. Nothing leaves your browser.
Business Desk
Invoices, purchase orders, contract drafts and company profiles. Fill and export as PDF or Word. Your company library is shared here too — open library.
Prepare a quotation
Select a template, fill details, export as PDF or Word. Your company library (CAC, certs, policies) is shared with bid preparation — open library.
Company document library
Upload documents that rarely change — code of conduct, CAC certificate, ISO certs, policies — once. Then drag & drop them into any attachment slot in any tender form \u2014 the actual CONTENT of the file (PDF pages, Word text, images) is rendered onto the page, not a file icon. Upload as PDF, .docx, or image.
Click to upload or drag files here
PDF, Word, Excel, images — stored in your library for reuse
Library items
0 documents
How it works: Suggested permanent documents to keep here — Code of Conduct, CAC Certificate, Form CO2 & CO7, Tax Clearance, NCDMB NCEC Certificate, NUPRC Certificate, ISO 9001 / 45001 certs, HSE Policy, Audited Accounts, Bank Reference. When you open any tender form and see a blue attachment slot, just drag the document from here (or use the picker) and it attaches instantly.
Document
Fill in the page below — header & footer are automatic
Drag library documents into blue slots
Done
by Neatlife
BidCrest
Find the contract. Build the bid. Win the work.
Nigeria’s tender-to-invoice workspace for servicing companies — bids, quotes, contracts and compliance in one place
5
Live contracts
8
Listed companies
8
Issuer packs
Live tender boardcontracts open for bidding, updated for you
Twice-weekly alertscontracts in your inbox every Mon & Thu
Company directorybe found by the clients already searching
8 issuer bid packsSeplat, Shell, Chevron, NNPC, NLNG & more
Auto letterhead & watermarkevery page branded, signed, submission-ready
E-signature on every pagesign once, applied throughout
Quotations & proformaspriced, professional, out the same day
Purchase orders & invoicesget the paperwork right, get paid faster
Contracts & NDAsNigerian-law drafts ready to sign
Company profile builderthe profile every bid asks for
NDPA & NCDMB checkerfind the fatal flaws before evaluators do
Shared company libraryupload CAC and certs once, reuse everywhere
Export to PDF or Worda real bid folder in one click
Live tender boardcontracts open for bidding, updated for you
Twice-weekly alertscontracts in your inbox every Mon & Thu
Company directorybe found by the clients already searching
8 issuer bid packsSeplat, Shell, Chevron, NNPC, NLNG & more
Auto letterhead & watermarkevery page branded, signed, submission-ready
E-signature on every pagesign once, applied throughout
Quotations & proformaspriced, professional, out the same day
Purchase orders & invoicesget the paperwork right, get paid faster
Contracts & NDAsNigerian-law drafts ready to sign
Company profile builderthe profile every bid asks for
NDPA & NCDMB checkerfind the fatal flaws before evaluators do
Shared company libraryupload CAC and certs once, reuse everywhere
Export to PDF or Worda real bid folder in one click
Marketplace
Live contracts open for bidding, company directory, announcements, and paid listings. Contracts emailed to subscribers every Monday & Thursday.
Enter marketplace
Bid workspace
Prepare compliant tender documents and professional quotations — Seplat, Shell, Chevron, NNPC, NLNG & more — with auto letterhead, watermark and e-signature on every page.
Open bid & quote workspace
Business Desk
Invoices, receipts, purchase orders, contracts, board resolutions and company profiles. Everything else your business sends.
Open office documents
© 2026 Neatlife Ltd — Software Solutions Company, Port Harcourt, Nigeria
BidCrest is a product of Neatlife Ltd  •  RC No: [add after CAC registration]
Bid & Quote Workspace
What would you like to prepare?
Bid preparation
Tender documents per issuer — Seplat, Shell, Chevron, NNPC, NLNG & more. Auto letterhead, watermark, e-signature.
Quote preparation
Standard quotations, proforma invoices, service quotes, LPOs, RFQ responses. Fill and export as PDF or Word.
Business Desk
Invoices, purchase orders, contract drafts and company profiles. Everything else your business sends.
Step 1 — Which company issued this tender?
Every client structures their bid pack differently. Pick the issuing company and BidCrest loads their exact form set — Seplat's Forms A–I, Shell's Attachments, NNPC's Procurement-Act forms, NLNG's Ariba envelopes, and so on. Pick Generic for any other client.
Where tenders are published (bookmark these):
• NipeX — all upstream oil & gas ITTs (Seplat, SPDC, Chevron, MPN, NNPC E&P, Renaissance…): nipex-ng.com → Current Opportunities
• NJQS vendor login (check your pre-qualification status): vms.nipex.org/login
• NLNG — SAP Ariba sourcing: nlng.com (Tenders/Suppliers section)
• Government MDAs — Bureau of Public Procurement open contracting: nocopo.bpp.gov.ng
• Aggregators — etenders.com.ng, publicprocurement.ng
Tender setup
These details automatically populate the header and footer of every document in this workspace — exactly like a real ITT response.
No custom image
"Bidder logo" auto-uses YOUR logo from slot 1 above (the applying company) — faded in the page centre. Or upload any custom image.
Upload signature
PNG with transparent background
works best. It's an e-document —
your scanned signature signs every page.
Upload logo
Top of the header stack —
small but recognizable.
Upload logo
Sits under yours — represents both
companies in the contract.
— or pick a default oil & gas logo —
Setup completeness check
Everything filled here appears automatically on every page. Run this check before opening your documents.
Client templates — Nigerian contract issuers
Click any client to pre-fill setup with their name and typical ITT reference format. Oil & gas operators plus other big contract-issuing organisations in Nigeria.
Oil & gas operators
Other major contract issuers
Documents in this workspace
Each requirement is a separate page/document — exactly like a real bid folder. Click any card to open and fill it.
Tender forms
Appendices
Tender opportunities — open for bidding in Nigeria
Track live ITTs here. Click Start bid on any opportunity and BidCrest loads that issuer's form pack with the title and reference pre-filled. Sample entries are illustrative — replace them with real adverts from the portals below.
Twice-weekly contracts email: every Monday & Thursday at 7:00am the contracts on this board are emailed automatically to subscribers.
Automatic portal feed (NipeX/NOCOPO) activates with the hosted backend — code is ready in the tender-feed folder.
Find a servicing company
Search registered servicing companies by name, service, or category. Companies with the Listed badge are paid, verified members of the BidCrest directory.
Create a post Admin — you
Announcements, tender tips, deadline reminders — visible to everyone on the site.
Latest posts
List your servicing company
Get found by clients searching the directory and receive the twice-weekly contracts email. Choose a plan below — paid securely via Paystack.
MOST FLEXIBLE
₦11,999 / quarter
Billed every 3 months • cancel any quarter
  • Listed in BidCrest directory
  • Twice-weekly contracts email
  • Removable any time
BEST VALUE — SAVE 20%
₦38,000 / year
One payment • ₦3,167/month effective
  • Everything in Quarterly
  • Priority placement in directory
  • Annual certificate of listing
Secured by Paystack — card details never touch BidCrest servers. Transactions are encrypted and processed by Paystack's PCI-DSS certified infrastructure.
8 servicing companies already listed. Be found by the clients searching right now.
By paying you agree to the Terms of Service and Refund Policy. Quarterly listing renews every 90 days; cancel any time.
Compliance checker
Answer honestly — this checks your company against the requirements Nigerian tender evaluators and regulators actually verify, plus your NDPA/NDPR data-protection duties. Nothing leaves your browser.
Business Desk
Invoices, purchase orders, contract drafts and company profiles. Fill and export as PDF or Word. Your company library is shared here too — open library.
Prepare a quotation
Select a template, fill details, export as PDF or Word. Your company library (CAC, certs, policies) is shared with bid preparation — open library.
Company document library
Upload documents that rarely change — code of conduct, CAC certificate, ISO certs, policies — once. Then drag & drop them into any attachment slot in any tender form \u2014 the actual CONTENT of the file (PDF pages, Word text, images) is rendered onto the page, not a file icon. Upload as PDF, .docx, or image.
Click to upload or drag files here
PDF, Word, Excel, images — stored in your library for reuse
Library items
0 documents
How it works: Suggested permanent documents to keep here — Code of Conduct, CAC Certificate, Form CO2 & CO7, Tax Clearance, NCDMB NCEC Certificate, NUPRC Certificate, ISO 9001 / 45001 certs, HSE Policy, Audited Accounts, Bank Reference. When you open any tender form and see a blue attachment slot, just drag the document from here (or use the picker) and it attaches instantly.
Document
Fill in the page below — header & footer are automatic
Drag library documents into blue slots
Done
, LISTING_FEE_ANNUAL:38000, LISTING_PERIOD:'quarter', // 'quarter' | 'annual' DIGEST_SCHEDULE:'Mon & Thu 07:00' }; /* ============ COMPANY DIRECTORY ============ */ var DIRECTORY=[ {id:1,name:'DeltaFluids Engineering Ltd',cat:'Drilling & Well Services',services:['mud engineering','completion fluids','lab testing'],loc:'Trans-Amadi, Port Harcourt',email:'info@deltafluids.example',phone:'0803 000 0001',about:'Drilling & completion fluids specialists, NipeX 2.07.03',listed:true,sample:true}, {id:2,name:'Bonny Channel Marine Services',cat:'Marine & Logistics',services:['crew boats','security escort vessels','offshore supply'],loc:'Onne, Rivers State',email:'ops@bcmarine.example',phone:'0803 000 0002',about:'NCMVC Category-A vessels, Nigerian-owned fleet',listed:true,sample:true}, {id:3,name:'Garden City Catering & Camps',cat:'Catering & Camp Management',services:['industrial catering','camp management','housekeeping'],loc:'Port Harcourt',email:'hello@gccatering.example',phone:'0803 000 0003',about:'HACCP-certified catering for rig sites & camps',listed:true,sample:true}, {id:4,name:'Apex NDT & Inspection Nigeria',cat:'Inspection & NDT',services:['UT / RT / MPI','tank inspection','rope access'],loc:'Warri, Delta State',email:'jobs@apexndt.example',phone:'0803 000 0004',about:'ASNT Level-III led inspection teams',listed:false,sample:true}, {id:5,name:'Ibom Fabrication & EPC Ltd',cat:'EPC & Fabrication',services:['piping','structural steel','pressure vessels'],loc:'Eket, Akwa Ibom',email:'bids@ibomepc.example',phone:'0803 000 0005',about:'ASME-coded fabrication yard, 200-tonne capacity',listed:true,sample:true}, {id:6,name:'SafeHands HSE Academy',cat:'HSE & Training',services:['OGTAN trainings','BOSIET','HSE consultancy'],loc:'GRA, Port Harcourt',email:'train@safehands.example',phone:'0803 000 0006',about:'OGTAN-registered trainer for HCD compliance',listed:true,sample:true}, {id:7,name:'Rivers Procurement Partners',cat:'Procurement & Supply',services:['OEM spares','chemicals supply','logistics'],loc:'Port Harcourt',email:'rfq@riversproc.example',phone:'0803 000 0007',about:'NCEC-holding procurement vendor',listed:false,sample:true}, {id:8,name:'Deepwater ICT Solutions',cat:'ICT & Telecoms',services:['VSAT','radio comms','CCTV'],loc:'Lagos & Port Harcourt',email:'sales@dwict.example',phone:'0803 000 0008',about:'Offshore communications & connectivity',listed:true,sample:true}, ]; function renderDirectory(){ var q=(v('dir-q')||'').toLowerCase(); var cat=document.getElementById('dir-cat')?document.getElementById('dir-cat').value:''; var list=DIRECTORY.filter(function(c){ var hay=(c.name+' '+c.cat+' '+c.services.join(' ')+' '+c.about+' '+c.loc).toLowerCase(); return (!q||hay.indexOf(q)>=0)&&(!cat||c.cat===cat); }); var g=document.getElementById('dir-grid'); if(!list.length){g.innerHTML='

No companies match — try a broader search.

';return;} g.innerHTML=list.map(function(c){ return '
' +'
'+esc(c.name.charAt(0))+'
' +'
' +'
'+esc(c.name)+' ' +(c.listed?''+(c.plan==='a'?'Listed — Annual':'Listed')+'':'Unlisted') +(c.sample?' sample':'')+'
' +'
'+esc(c.cat)+' \u2022 '+esc(c.loc)+'
' +'
'+esc(c.about)+'
' +'
'+c.services.map(function(s){return ''+esc(s)+'';}).join('')+'
' +'
' +'
' +' Contact' +'
'+esc(c.phone)+'
' +'
' +'
'; }).join(''); } /* ============ POSTS ============ */ var POSTS=[ {id:1,title:'Welcome to BidCrest',body:'Track live tenders, prepare compliant bid documents per issuer, and get contracts emailed to you every Monday and Thursday. Servicing companies can list in the directory to be found by clients.',date:new Date().toLocaleDateString('en-GB'),sample:true}, {id:2,title:'Reminder: NCDMB fatal-flaw items',body:'Before any NipeX submission confirm: >51% Nigerian equity evidence (CO2/CO7), live NJQS category, valid NCEC, project organogram with CVs, and OGTAN training undertaking. Missing any one is a fatal flaw.',date:new Date().toLocaleDateString('en-GB'),sample:true}, ]; function renderPosts(){ var f=document.getElementById('posts-feed'); if(!POSTS.length){f.innerHTML='

No posts yet.

';return;} f.innerHTML=POSTS.map(function(p){ return '
' +'
'+esc(p.title)+'
' +''+esc(p.date)+'' +'
' +'
'+esc(p.body)+'
' +'
'; }).join(''); } function unlockAdmin(){ if(document.getElementById('admin-key').value.trim()==='phcrest2021'){ document.getElementById('admin-form').style.display='block';showNotif('Admin unlocked'); }else alert('Invalid key'); } function publishPost(){ var t=v('post-title'),b=v('post-body'); if(!t||!b){alert('Title and body are required');return;} POSTS.unshift({id:Date.now(),title:t,body:b,date:new Date().toLocaleDateString('en-GB'),sample:false}); document.getElementById('post-title').value='';document.getElementById('post-body').value=''; renderPosts();showNotif('Post published'); } function delPost(id){POSTS=POSTS.filter(function(p){return p.id!==id;});renderPosts();showNotif('Post deleted');} /* ============ VENDOR REGISTRATION + PAYSTACK ============ */ function selectPlan(p){ CONFIG.LISTING_PERIOD=p; var isQ=p==='q'; var qEl=document.getElementById('plan-q'),aEl=document.getElementById('plan-a'); if(qEl){qEl.style.border=isQ?'2px solid #2563eb':'2px solid #e5e5e5';qEl.style.background=isQ?'#eff6ff':'#fff';} if(aEl){aEl.style.border=!isQ?'2px solid #16a34a':'2px solid #e5e5e5';aEl.style.background=!isQ?'#f0fdf4':'#fff';} var fee=isQ?11999:38000; CONFIG.LISTING_FEE_NGN=fee; var btn=document.getElementById('pay-btn'); if(btn)btn.innerHTML=' Pay ₦'+fee.toLocaleString()+(isQ?' (Quarterly)':' (Annual — save 20%)')+' & List my company'; } function payAndRegister(){ var name=v('rg-name'),email=v('rg-email'),services=v('rg-services'); if(!name||!email||!services){alert('Company name, email and services are required');return;} var rec={ id:Date.now(),name:name,cat:document.getElementById('rg-cat').value, services:services.split(',').map(function(s){return s.trim();}).filter(Boolean), loc:v('rg-loc')||'Nigeria',email:email,phone:v('rg-phone')||'-', about:v('rg-about')||'Registered servicing company',listed:false,sample:false }; if(CONFIG.PAYSTACK_PUBLIC_KEY&&window.PaystackPop){ var handler=PaystackPop.setup({ key:CONFIG.PAYSTACK_PUBLIC_KEY, email:email, amount:CONFIG.LISTING_FEE_NGN*100, // kobo currency:'NGN', metadata:{app:'bidcrest',purpose:'directory_listing',company:name}, callback:function(resp){ // Real deployments MUST verify resp.reference server-side (paystack-webhook.ts does this) completeRegistration(rec,resp.reference); }, onClose:function(){showNotif('Payment window closed');} }); handler.openIframe(); }else{ // Demo mode — simulate a successful charge so the flow can be tested if(confirm('DEMO MODE: no Paystack key configured.\n\nSimulate a successful \u20a6'+CONFIG.LISTING_FEE_NGN.toLocaleString()+' payment for "'+name+'"?')){ completeRegistration(rec,'DEMO-'+Date.now()); } } } function completeRegistration(rec,ref){ rec.listed=true; var dc=document.getElementById('dir-count');if(dc)dc.innerText=DIRECTORY.filter(function(x){return x.listed;}).length+1; rec.plan=CONFIG.LISTING_PERIOD; rec.expires=CONFIG.LISTING_PERIOD==='q'?'3 months from today':'12 months from today'; DIRECTORY.unshift(rec); ['rg-name','rg-rc','rg-services','rg-loc','rg-email','rg-phone','rg-about'].forEach(function(id){document.getElementById(id).value='';}); showNotif('Payment confirmed ('+ref+') — company listed for 1 year'); goView('directory',document.getElementById('nav-directory')); renderDirectory(); } /* ============ EMAIL DIGEST SUBSCRIBE ============ */ var SUBSCRIBERS=[]; function subscribeDigest(){ var e=v('digest-email'); if(!e||e.indexOf('@')<1){alert('Enter a valid email');return;} if(SUBSCRIBERS.indexOf(e)<0)SUBSCRIBERS.push(e); document.getElementById('digest-email').value=''; showNotif('Subscribed \u2014 contracts land in this inbox every Mon & Thu 7:00am'); } /* ============ LIVE OPPORTUNITIES BOARD ============ */ var OPPS=[ {id:1,title:'Provision of Drilling and Completion Fluids Engineering Services',issuer:'seplat',ref:'SR3028491137',close:'2026-11-20',link:'https://nipexmain2.nipex-ng.com/supplier-notice/current-opportunities/',sample:true}, {id:2,title:'Provision of Marine Logistics & Security Escort Vessels',issuer:'shell',ref:'SNEPCO.00000xxx',close:'2026-10-30',link:'https://nipexmain2.nipex-ng.com/supplier-notice/current-opportunities/',sample:true}, {id:3,title:'Well-head Maintenance and Flowline Repairs — OML Assets',issuer:'nnpc',ref:'NipeX 10000xxxxx',close:'2026-10-09',link:'https://nipexmain2.nipex-ng.com/supplier-notice/current-opportunities/',sample:true}, {id:4,title:'Catering & Camp Management Services',issuer:'chevron',ref:'CNL.00000xxx',close:'2026-09-25',link:'https://nipexmain2.nipex-ng.com/supplier-notice/current-opportunities/',sample:true}, {id:5,title:'Supply of Industrial Gases & Cryogenic Equipment',issuer:'nlng',ref:'NLNG/C2026/xxx',close:'2026-11-06',link:'https://www.nlng.com',sample:true}, ]; function daysLeft(dstr){ if(!dstr)return null; var diff=Math.ceil((new Date(dstr)-new Date())/(1000*60*60*24)); return diff; } function renderOpps(){ document.getElementById('opp-count').innerText=OPPS.length; var g=document.getElementById('opps-grid'); if(!OPPS.length){g.innerHTML='

No opportunities tracked yet — add one, or browse the portals above.

';return;} var cards=OPPS.map(function(o){ var c=COMPANY_PROFILES[o.issuer]||COMPANY_PROFILES.generic; var dl=daysLeft(o.close); var dlTag=dl===null?'':dl<0?'Closed' :dl<=7?''+dl+' day(s) left' :dl<=21?''+dl+' days left' :''+dl+' days left'; var logoH=c.logo&&LOGOS[c.logo]?'':'
'+esc(c.name.split(' ')[0])+'
'; var dlBg=dl===null?'#e5e5e5':dl<0?'#fef2f2':dl<=7?'#fef2f2':dl<=21?'#fef3c7':'#f0fdf4'; var dlFg=dl===null?'#6b7280':dl<0?'#991b1b':dl<=7?'#991b1b':dl<=21?'#92400e':'#166534'; var dlTxt=dl===null?'No date':dl<0?'CLOSED':dl===0?'TODAY':dl+'d left'; return '
' +'
' +'
'+logoH+'
' +'
'+dlTxt+'
' +'
' +'
'+esc(o.title)+(o.sample?' sample':'')+'
' +'
'+esc(c.name)+'  •  Ref: '+esc(o.ref||'-')+'  •  Closes: '+esc(o.close||'TBA')+'
' +'
' +(o.link?' Advert':'') +'' +'' +'
' +'
'; }).join(''); } function openOppModal(){document.getElementById('opp-modal').classList.add('open');} function saveOpp(){ var t=v('op-title');if(!t){alert('Title is required');return;} OPPS.unshift({id:Date.now(),title:t,issuer:document.getElementById('op-issuer').value,ref:v('op-ref'),close:v('op-close'),link:v('op-link'),sample:false}); document.getElementById('opp-modal').classList.remove('open'); document.getElementById('op-title').value='';document.getElementById('op-ref').value='';document.getElementById('op-close').value='';document.getElementById('op-link').value=''; renderOpps();showNotif('Opportunity added'); } function deleteOpp(id){OPPS=OPPS.filter(function(o){return o.id!==id;});renderOpps();showNotif('Removed');} function startBidFromOpp(id){ var o=OPPS.find(function(x){return x.id===id;});if(!o)return; selectIssuer(o.issuer); document.getElementById('s-title').value=o.title; if(o.ref)document.getElementById('s-ittno').value=o.ref; refreshAllPages(); showNotif('Bid started: '+o.title); } /* Issuer (company) selection — step 1 */ function renderIssuers(){ var keys=['seplat','shell','nnpc','chevron','nlng','aradel','exxon','generic']; document.getElementById('issuer-grid').innerHTML=keys.map(function(k){ var c=COMPANY_PROFILES[k]; var visual=c.logo?'':'
'+c.initials+'
'; return '
'+visual +'
'+esc(c.name)+'
' +'
'+esc(c.docs.length+c.apps.length)+' documents \u2022 '+esc(c.portal)+'
' +'
ITT format: '+esc(c.fmt)+'
'; }).join(''); } function selectIssuer(k){ saveCurrentDoc(); activeCompany=k;currentDocId=null; var c=COMPANY_PROFILES[k]; document.querySelectorAll('#issuer-grid .client-card').forEach(function(x){x.classList.remove('selected');}); var el=document.getElementById('issuer-'+k);if(el)el.classList.add('selected'); if(c.full)document.getElementById('s-client').value=c.full; document.getElementById('s-ittno').placeholder='e.g. '+c.fmt; /* ============ OFFICE DOCUMENTS ============ */ function _r(cells){return ''+cells.map(function(c){return ''+(c||' ')+'';}).join('')+'';} var OFFICE_TEMPLATES=[ {id:'invoice',name:'Invoice',cat:'Billing',icon:'ti-file-invoice',color:'#2563eb', desc:'Tax invoice with item table, VAT and bank details. The document you send to get paid.', body:'

INVOICE

' +'' +'' +'
Invoice No.INV-2026-001Date
From[Your company]
[Address]
RC: [number]
Bill to[Client name]
[Address]
Your ref Due date
' +'' +_r(['1','','','',''])+_r(['2','','','',''])+_r(['3','','','',''])+_r(['4','','','','']) +'' +'' +'' +'
S/NDescriptionQtyUnit Price (₦)Amount (₦)
Sub-total
VAT (7.5%)
WHT deduction (if any)
TOTAL DUE
' +'

Amount in words:

' +'

Payment details

' +'
Account name
Bank
Account number
' +'

Thank you for your business. Payment due within the stated terms.

'}, {id:'receipt',name:'Payment receipt',cat:'Billing',icon:'ti-receipt-2',color:'#0369a1', desc:'Acknowledge payment received. Issue after an invoice is settled.', body:'

PAYMENT RECEIPT

' +'' +'' +'' +'' +'
Receipt No.RCP-2026-001Date
Received from[Client name]
The sum of (₦) In words
Being payment for[Invoice ref / description]
Payment methodBank transfer / Cash / ChequeInvoice ref
' +'
___________________
Received by
___________________
Authorised signature & stamp
'}, {id:'lpo',name:'Purchase order (LPO)',cat:'Procurement',icon:'ti-shopping-cart',color:'#b45309', desc:'Issue a formal purchase order to a supplier or sub-vendor.', body:'

PURCHASE ORDER

' +'' +'' +'
PO No.PO-2026-001Date
Issued by[Your company]Supplier[Supplier name]
Deliver to[Delivery address]Required by
' +'' +_r(['1','','','','',''])+_r(['2','','','','',''])+_r(['3','','','','','']) +'' +'' +'
S/NItem / serviceUnitQtyUnit Price (₦)Amount (₦)
Sub-total
VAT (7.5%)
TOTAL
' +'

Terms: Payment net 30 days from delivery. Goods to conform to specification.

' +'
Authorised byDate
'}, {id:'nda',name:'Non-Disclosure Agreement',cat:'Contracts',icon:'ti-file-shield',color:'#7e22ce', desc:'Mutual NDA under Nigerian law. Use before sharing confidential business information.', body:'

NON-DISCLOSURE AGREEMENT

' +'

This Non-Disclosure Agreement ("Agreement") is made on [date] BETWEEN [Party A name], of [address] AND [Party B name], of [address] (together "the Parties").

' +'

1. Purpose

The Parties wish to explore a potential business relationship and may disclose confidential information to each other.

' +'

2. Confidential Information

"Confidential Information" means any information disclosed by one party to the other, whether orally, in writing or otherwise, that is designated confidential or would reasonably be understood to be confidential.

' +'

3. Obligations

Each party shall: (a) keep the Confidential Information strictly confidential; (b) not disclose it to any third party without prior written consent; (c) use it solely for the stated purpose; and (d) return or destroy it on request.

' +'

4. Exclusions

This Agreement does not apply to information that is publicly available, already known, or independently developed without breach of this Agreement.

' +'

5. Duration

The obligations herein survive for [3] years from the date of disclosure.

' +'

6. Governing Law

This Agreement is governed by the laws of the Federal Republic of Nigeria.

' +'' +'
Signed for Party ASigned for Party B
Name:
Signature:
Date:
Name:
Signature:
Date:
'}, {id:'service_agr',name:'Service Agreement',cat:'Contracts',icon:'ti-file-text',color:'#7e22ce', desc:'Contract between a service provider and client. Covers scope, payment, duration.', body:'

SERVICE AGREEMENT

' +'

This Service Agreement is made on [date] BETWEEN [Service Provider], of [address] ("the Contractor") AND [Client], of [address] ("the Client").

' +'

1. Scope of Services

The Contractor shall provide the following services: [describe services in detail].

' +'

2. Duration

This Agreement commences on [start date] and continues until [end date] unless terminated earlier in accordance with clause 6.

' +'

3. Consideration & Payment

The Client shall pay the Contractor ₦[amount] payable [schedule]. All fees are exclusive of applicable taxes.

' +'

4. Obligations of the Contractor

The Contractor shall perform the services with reasonable skill and care and in compliance with applicable Nigerian laws and regulations.

' +'

5. Confidentiality

Each party shall keep confidential all information obtained under this Agreement.

' +'

6. Termination

Either party may terminate on [30] days written notice. Either party may terminate immediately for material breach.

' +'

7. Governing Law

This Agreement is governed by the laws of the Federal Republic of Nigeria and disputes shall be resolved by arbitration in [city].

' +'' +'
The ContractorThe Client
Name:
Designation:
Signature & date:
Name:
Designation:
Signature & date:
'}, {id:'board_res',name:'Board Resolution',cat:'Corporate',icon:'ti-gavel',color:'#0891b2', desc:'CAC-style board resolution — opening accounts, appointing directors, authorising signatories.', body:'

[COMPANY NAME] LIMITED

RC: [number]

EXTRACT OF RESOLUTION OF THE BOARD OF DIRECTORS

' +'

At a meeting of the Board of Directors of the above-named Company held on [date] at [venue], the following resolutions were passed:

' +'

IT WAS RESOLVED THAT:

' +'
  1. [State the first resolution — e.g. a corporate account be opened with [Bank]].
  2. ' +'
  3. The following persons be and are hereby authorised as signatories to the account: [names & designations].
  4. ' +'
  5. [Any further resolution].
' +'

The above resolutions were duly proposed, seconded and carried.

' +'' +'
DirectorDirector / Secretary
Name:
Signature:
Name:
Signature:
'}, {id:'company_profile',name:'Company Profile',cat:'Marketing',icon:'ti-building',color:'#16a34a', desc:'Multi-section company profile sent with every bid — about, capabilities, clients, HSE.', body:'

[COMPANY NAME]

[Your tagline — e.g. Excellence in Oilfield Services]

' +'

1. About Us

[Company name] is a wholly Nigerian-owned company incorporated in [year], specialising in [core services]. We are registered with NCDMB (NOGIC JQS), NUPRC, and hold [certifications].

' +'

2. Our Vision & Mission

Vision: [Your vision statement]

Mission: [Your mission statement]

' +'

3. Core Capabilities

' +'

4. Track Record

'+_r(['','','',''])+_r(['','','',''])+_r(['','','',''])+'
ProjectClientYearValue/Scope
' +'

5. Key Personnel

'+_r(['','','',''])+_r(['','','',''])+'
NameRoleQualificationExperience
' +'

6. Health, Safety & Environment

[Company name] operates a robust HSE management system aligned with ISO 45001 and NCDMB requirements. Our LTI-free record stands at [X] man-hours.

' +'

7. Certifications & Registrations

' +'

8. Contact

Address: [full address]
Phone: [numbers]
Email: [email]
Website: [website]

'} ]; function renderOfficeTemplates(){ var g=document.getElementById('office-templates');if(!g)return; var cats={}; OFFICE_TEMPLATES.forEach(function(t){(cats[t.cat]=cats[t.cat]||[]).push(t);}); var out=''; Object.keys(cats).forEach(function(cat){ out+='
'+cat+'
'; cats[cat].forEach(function(t){ out+='
'+t.name+'
'+t.desc+'
'; }); }); g.innerHTML=out; } function openOffice(id){ var t=OFFICE_TEMPLATES.find(function(x){return x.id===id;});if(!t)return; document.getElementById('oe-title').innerHTML=' '+t.name; document.getElementById('office-body').innerHTML=t.body; document.getElementById('office-editor-area').style.display='block'; } function exportOffice(fmt){ var inner=document.getElementById('office-body').innerHTML; var css='body{font-family:Calibri,sans-serif;margin:40px 60px;font-size:13px;line-height:1.85}table{width:100%;border-collapse:collapse;margin:12px 0}td,th{border:1px solid #999;padding:6px 9px;vertical-align:top}th{background:#f0f0f0;text-align:left}h1{font-size:20px;text-align:center}h2{font-size:14px;margin:16px 0 7px;color:#0F2B4C}ul,ol{margin:0 0 10px 22px}'; if(fmt==='doc'){var blob=new Blob(['\ufeff'+inner+''],{type:'application/msword'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='Document.doc';document.body.appendChild(a);a.click();a.remove();showNotif('Word exported');} else{var fr=document.createElement('iframe');fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0';document.body.appendChild(fr);var fd=fr.contentWindow.document;fd.open();fd.write(''+inner+'');fd.close();setTimeout(function(){try{fr.contentWindow.focus();fr.contentWindow.print();}catch(e){}setTimeout(function(){fr.remove();},4000);},600);showNotif('Print — choose Save as PDF');} } /* ============ COMPLIANCE CHECKER ============ */ var COMP_SECTIONS=[ {cat:'Corporate & statutory (Public Procurement Act)',items:[ {id:'c1',q:'CAC Certificate of Incorporation is valid and available',w:3,fix:'Obtain/renew via CAC. Every tender requires certified true copies.'}, {id:'c2',q:'CAC Forms CO2 (share allotment) and CO7 (directors) available',w:3,fix:'Request certified copies from CAC — evaluators use these to verify >51% Nigerian equity.'}, {id:'c3',q:'Annual returns filed with CAC and up to date',w:2,fix:'File outstanding annual returns — an inactive status disqualifies bids.'}, {id:'c4',q:'Tax Clearance Certificate for the last 3 years',w:3,fix:'Apply through FIRS/State IRS. Three consecutive years is the standard requirement.'}, {id:'c5',q:'PENCOM Compliance Certificate (current year)',w:2,fix:'Obtain from PENCOM — mandatory under the Pension Reform Act for public contracts.'}, {id:'c6',q:'ITF Compliance Certificate (current year)',w:2,fix:'Register and remit with the Industrial Training Fund.'}, {id:'c7',q:'NSITF Compliance Certificate (current year)',w:2,fix:'Register with NSITF under the Employee Compensation Act.'}, {id:'c8',q:'BPP Interim Registration Report (IRR) obtained',w:2,fix:'Register on NOCOPO/BPP portal — required for federal government contracts.'}, {id:'c9',q:'Sworn affidavit (no conviction, not bankrupt, documents genuine) prepared',w:2,fix:'Swear before a Commissioner for Oaths — template available in Bid preparation.'}]}, {cat:'Nigerian Content (NOGICD Act 2010 / NCDMB)',items:[ {id:'n1',q:'Company is Nigerian-registered with more than 51% Nigerian equity',w:3,fix:'Restructure shareholding — below 51% you cannot qualify as a Nigerian company under the Act.'}, {id:'n2',q:'NCDMB NOGIC JQS registration is LIVE (not lapsed)',w:3,fix:'Renew your JQS subscription — a lapsed category is an automatic fatal flaw on NipeX.'}, {id:'n3',q:'Valid Nigerian Content Equipment Certificate (NCEC) held for your category',w:2,fix:'Apply via NCDMB for the correct MS/SS/EC category covering your scope.'}, {id:'n4',q:'Project-specific organogram with names, roles and nationalities prepared',w:2,fix:'Prepare an organogram with CVs attached — required in most technical submissions.'}, {id:'n5',q:'Human Capacity Development plan via an OGTAN-registered trainer',w:2,fix:'Sign an undertaking with an OGTAN-registered training provider.'}, {id:'n6',q:'Expatriate quota position documented (approval or a nil-expatriate declaration)',w:1,fix:'Obtain approval from the Ministry of Interior, or state clearly that no expatriates are used.'}, {id:'n7',q:'Nigerian Content Plan showing local sourcing and local labour commitments',w:2,fix:'Prepare an NC Plan quantifying Nigerian spend, staff and materials.'}]}, {cat:'HSE & operations',items:[ {id:'h1',q:'Written HSE policy signed by the Managing Director',w:2,fix:'Issue and sign an HSE policy statement — evaluators check for a current signature and date.'}, {id:'h2',q:'HSE statistics for the last 3 years (LTI, man-hours, incidents) documented',w:2,fix:'Compile records; an absent record is treated as poor performance.'}, {id:'h3',q:'Named, qualified HSE officer/manager in post',w:2,fix:'Appoint a competent HSE lead and attach their CV and certificates.'}, {id:'h4',q:'Valid insurance: workmen compensation, third-party, and equipment cover',w:2,fix:'Obtain policies from a NAICOM-licensed insurer and keep certificates current.'}]}, {cat:'Data protection (NDPA 2023 / NDPR)',items:[ {id:'d1',q:'A published privacy policy explains what personal data you collect and why',w:3,fix:'Publish a privacy notice covering data collected, lawful basis, retention and data-subject rights.'}, {id:'d2',q:'You have a lawful basis (consent, contract, legal duty) for staff and client data',w:3,fix:'Document the lawful basis for each processing activity — a written record is expected.'}, {id:'d3',q:'A Data Protection Officer or a responsible person has been designated',w:2,fix:'Designate a DPO or a named responsible officer; larger processors must formally appoint one.'}, {id:'d4',q:'Staff who handle personal data have received basic data-protection training',w:2,fix:'Run short annual training and keep an attendance record as evidence.'}, {id:'d5',q:'Personal data is stored securely (access control, passwords, encryption or locked files)',w:3,fix:'Restrict access, use strong passwords, and encrypt or lock away CVs, IDs and payroll records.'}, {id:'d6',q:'A breach response procedure exists (NDPA requires notification within 72 hours)',w:2,fix:'Write a short breach procedure naming who is alerted and how the NDPC is notified within 72 hours.'}, {id:'d7',q:'Data-processing agreements exist with vendors handling your data (payroll, IT, HR)',w:2,fix:'Sign written processing agreements with third parties that handle personal data for you.'}, {id:'d8',q:'You can respond to data-subject requests (access, correction, deletion)',w:2,fix:'Create a simple log and process for handling requests within statutory timelines.'}, {id:'d9',q:'Annual data-protection audit filed with the NDPC where required',w:2,fix:'Major data controllers must file an annual audit via a licensed DPCO — check whether your volumes qualify.'}]} ]; function renderCompliance(){ var f=document.getElementById('comp-form');if(!f)return; if(f.dataset.built)return; var out=''; COMP_SECTIONS.forEach(function(s){ out+='
'+s.cat+'
'; s.items.forEach(function(it){ out+='
' +'' +'
'+it.q+'
'; }); }); f.innerHTML=out; f.dataset.built='1'; } function runCompliance(){ var got=0,max=0,gaps=[],prog=[]; COMP_SECTIONS.forEach(function(s){ s.items.forEach(function(it){ var el=document.getElementById(it.id); if(!el)return; var v=el.value; if(v==='na')return; max+=it.w; if(v==='y')got+=it.w; else if(v==='p'){got+=it.w*0.5;prog.push({s:s.cat,q:it.q,fix:it.fix});} else gaps.push({s:s.cat,q:it.q,fix:it.fix,w:it.w}); }); }); var pct=max?Math.round(got/max*100):0; var band=pct>=85?['Strong','#16a34a','#f0fdf4']:pct>=60?['Adequate — gaps to close','#b45309','#fffbeb']:['High risk — act now','#dc2626','#fef2f2']; gaps.sort(function(a,b){return b.w-a.w;}); var html='
Compliance report
' +'
' +'
'+pct+'%
' +'
'+band[0]+'
' +'
'+gaps.length+' gap(s) to close, '+prog.length+' in progress
'; if(gaps.length){ html+='
PRIORITY GAPS — highest weight first
'; gaps.forEach(function(g){ html+='
' +'
'+g.q+'
' +'
'+g.s+'
' +'
Action: '+g.fix+'
'; }); } if(prog.length){ html+='
IN PROGRESS — finish these
'; prog.forEach(function(g){ html+='
' +'
'+g.q+'
' +'
'+g.fix+'
'; }); } if(!gaps.length&&!prog.length)html+='

No gaps recorded. Keep certificates current and re-run before each submission.

'; html+='
' +'

This is a self-assessment aid, not legal advice. Verify current requirements with CAC, NCDMB, FIRS and the NDPC, and consult a professional for anything material.

'; document.getElementById('comp-result').innerHTML=html; document.getElementById('comp-result').scrollIntoView({behavior:'smooth'}); } function exportCompliance(){ var inner=document.getElementById('comp-result').innerHTML.replace(//g,''); var css='body{font-family:Calibri,sans-serif;margin:40px 55px;font-size:13px;line-height:1.7}h1{font-size:19px;color:#0F2B4C}'; var doc='Compliance report

BidCrest Compliance Report

Generated '+new Date().toLocaleDateString()+'

'+inner+''; var fr=document.createElement('iframe');fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0'; document.body.appendChild(fr);var fd=fr.contentWindow.document;fd.open();fd.write(doc);fd.close(); setTimeout(function(){try{fr.contentWindow.focus();fr.contentWindow.print();}catch(e){}setTimeout(function(){fr.remove();},4000);},600); showNotif('Print dialog — choose Save as PDF'); } /* ============ QUOTES ============ */ var QUOTE_TEMPLATES=[ {id:'std',name:'Standard quotation',desc:'Item table with terms and validity — the most common format.', body:'

QUOTATION

FromTo
[Your company]
[Address]
[Phone/Email]
[Client name]
[Address]
Ref Date

RE: Quotation for [describe goods/services]

S/NDescriptionUnitQtyUnit Price (₦)Amount (₦)
1
2
3
4
5
Sub-total
VAT (7.5%)
Grand Total

Terms

  1. Valid for 30 days.
  2. Payment: 50% advance, balance on delivery.
  3. Delivery: [X] working days from PO.

Yours faithfully,

[Name, Designation, Company]

'}, {id:'proforma',name:'Proforma invoice',desc:'For advance payment processing or raising a purchase order.', body:'

PROFORMA INVOICE

Invoice No.PI-2026-001Date
From[Your company]To[Client]
S/NItemUnitQtyRate (₦)Amount (₦)
1
2
3
Total

Bank:

Account name
Bank
Account no.

Valid for 14 days.

'}, {id:'service',name:'Service quote (labour + materials)',desc:'Separates labour, materials and logistics — common for well services and fabrication.', body:'

SERVICE QUOTATION

ContractorClient
[Company][Client]

A. Labour

S/NRoleNo.DaysDay rate (₦)Amount
1
2
Labour sub-total

B. Materials

S/NMaterialUnitQtyCost (₦)Amount
1
Materials sub-total

C. Logistics

ItemAmount (₦)
Mobilisation
Logistics sub-total
Grand Total
VAT
Total incl. VAT
'}, {id:'lpo',name:'Local purchase order (LPO)',desc:'Mirrors LPO layout some clients require for internal approval.', body:'

LOCAL PURCHASE ORDER

LPO No.LPO-2026-001Date
Vendor[Your company]Deliver to[Site]
S/NDescriptionUnitQtyPrice (₦)Amount (₦)
1
2
Total

Delivery: [X] working days

Payment: Net 30 days

Authorised byApproved byReceived by
'}, {id:'rfq',name:'RFQ response cover letter',desc:'Formal letter responding to a Request for Quotation — wraps around any price schedule.', body:'
[Your company letterhead]
[Address]
[Date]

[Client name]
[Client address]

Attention: [Procurement Manager]

RE: RESPONSE TO RFQ - [Reference / Title]

Dear Sir/Madam,

We refer to your RFQ and submit our pricing as attached.

  1. Scope: [Describe scope]
  2. Location: [Site]
  3. Timeline: [Period]
  4. Validity: [30/60/90] days.

Prices are in Naira, exclusive of WHT, inclusive of VAT.

Yours faithfully,

[Name]
[Designation]
[Company]

'} ]; function renderQuoteTemplates(){ var g=document.getElementById('quote-templates');if(!g)return; var icons=['ti-file-text','ti-receipt-2','ti-tool','ti-shopping-cart','ti-mail']; var colors=['#2563eb','#16a34a','#b45309','#7e22ce','#0369a1']; g.innerHTML=QUOTE_TEMPLATES.map(function(q,i){ return '
'+q.name+'
'+q.desc+'
'; }).join(''); } function openQuote(id){ var q=QUOTE_TEMPLATES.find(function(t){return t.id===id;});if(!q)return; document.getElementById('qe-title').innerHTML=' '+q.name; document.getElementById('quote-body').innerHTML=q.body; document.getElementById('quote-editor-area').style.display='block'; } function exportQuote(fmt){ var inner=document.getElementById('quote-body').innerHTML; var css='body{font-family:Calibri,sans-serif;margin:40px 60px;font-size:13px;line-height:1.85}table{width:100%;border-collapse:collapse;margin:12px 0}td,th{border:1px solid #999;padding:6px 9px;vertical-align:top}th{background:#f0f0f0;text-align:left}h1{font-size:18px;text-align:center}h2{font-size:14px;margin:16px 0 7px}'; if(fmt==='doc'){var blob=new Blob(['\ufeff'+inner+''],{type:'application/msword'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='Quote.doc';document.body.appendChild(a);a.click();a.remove();showNotif('Word exported');} else{var fr=document.createElement('iframe');fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0';document.body.appendChild(fr);var fd=fr.contentWindow.document;fd.open();fd.write(''+inner+'');fd.close();setTimeout(function(){try{fr.contentWindow.focus();fr.contentWindow.print();}catch(e){}setTimeout(function(){fr.remove();},4000);},600);showNotif('Print — choose Save as PDF');} } renderDocNav(); showNotif(c.name+' form pack loaded ('+(c.docs.length+c.apps.length)+' documents)'); goView('setup',document.getElementById('nav-setup')); } /* Client templates */ function renderClients(){ function card(c,i,listName){ var visual=c.logo ?'' :'
'+c.initials+'
'; return '
'+visual +'
'+esc(c.name)+'
'+esc(c.fmt)+'
'; } document.getElementById('client-grid-og').innerHTML=CLIENTS_OG.map(function(c,i){return card(c,i,'og');}).join(''); document.getElementById('client-grid-other').innerHTML=CLIENTS_OTHER.map(function(c,i){return card(c,i,'other');}).join(''); } function applyClient(list,i,el){ var c=(list==='og'?CLIENTS_OG:CLIENTS_OTHER)[i]; document.querySelectorAll('.client-card').forEach(function(x){x.classList.remove('selected');}); el.classList.add('selected'); document.getElementById('s-client').value=c.full; var itt=document.getElementById('s-ittno'); if(!itt.value.trim())itt.placeholder='e.g. '+c.fmt; showNotif('Client set: '+c.name); refreshAllPages(); } /* ============ COMPANY LIBRARY ============ */ function libUpload(e){libProcess(e.target.files);} function libDrop(e){e.preventDefault();document.querySelector('.lib-upload-zone').classList.remove('dragover');libProcess(e.dataTransfer.files);} function libProcess(files){ Array.from(files).forEach(function(f){ var r=new FileReader(); r.onload=function(ev){ libItems.push({cat:(document.getElementById('lib-cat')?document.getElementById('lib-cat').value:'Other'),id:'lib'+Date.now()+Math.floor(Math.random()*999),name:f.name,size:f.size,type:f.type,data:ev.target.result}); renderLib(); }; r.readAsDataURL(f); }); showNotif(files.length+' file(s) added to library'); } function renderLib(){ var g=document.getElementById('lib-grid');if(!g)return; if(!libItems.length){g.innerHTML='

No documents yet. Upload your CAC, signatures, policies and certificates — they can then be dragged into any bid, quote or office document.

';return;} var groups={}; libItems.forEach(function(it){var c=it.cat||'Other';(groups[c]=groups[c]||[]).push(it);}); var out=''; LIB_CATS.forEach(function(cat){ if(!groups[cat])return; out+='
'+cat+' ('+groups[cat].length+')
'; groups[cat].forEach(function(it){ out+='
' +'
'+esc(it.name)+'
' +'
'+it.size+' \u2022 '+(it.type||'file')+'
' +'
'; }); }); g.innerHTML=out; } function libDelete(id){libItems=libItems.filter(function(x){return x.id!==id;});renderLib();showNotif('Removed from library');} function libDragStart(e,id){e.dataTransfer.setData('text/lib-id',id);e.target.classList.add('dragging');} /* attachment slots */ function slotDrop(e,slot){ e.preventDefault();slot.classList.remove('dragover'); var id=e.dataTransfer.getData('text/lib-id'); if(id){var it=libItems.find(function(x){return x.id===id;});if(it){slotAttachItem(slot,it.name,it.type,it.data);return;}} if(e.dataTransfer.files&&e.dataTransfer.files.length){ Array.from(e.dataTransfer.files).forEach(function(f){ var r=new FileReader(); r.onload=function(ev){slotAttachItem(slot,f.name,f.type,ev.target.result);}; r.readAsDataURL(f); }); } } /* Attach + UNLEASH the actual content onto the page (not just a file chip) */ function slotAttachItem(slot,name,type,dataUrl){ var cid='libc'+Date.now()+Math.floor(Math.random()*999); var files=slot.querySelector('.slot-files'); files.innerHTML+='
'+esc(name)+'
'; var holder=document.createElement('div'); holder.id=cid;holder.setAttribute('contenteditable','false');holder.style.cssText='margin:8px 0'; slot.parentNode.insertBefore(holder,slot.nextSibling); renderLibContent(holder,name,type||'',dataUrl); showNotif('Inserting content of: '+name); } function renderLibContent(holder,name,type,dataUrl){ var head='
\u2014 Content of '+esc(name)+' \u2014
'; if(type.indexOf('image')===0){ holder.innerHTML=head+''; }else if(type==='application/pdf'||/\.pdf$/i.test(name)){ holder.innerHTML=head+'
Extracting PDF content\u2026
'; renderPdfInto(holder,dataUrl,head); }else if(/\.docx$/i.test(name)||type.indexOf('officedocument.wordprocessingml')>=0){ holder.innerHTML=head+'
Extracting Word content\u2026
'; renderDocxInto(holder,dataUrl,head); }else if(/\.doc$/i.test(name)){ holder.innerHTML=head+'
Legacy .doc cannot be extracted in-browser \u2014 re-save it as .docx, PDF or image and it will render fully. Attached as reference.
'; }else{ holder.innerHTML=head+'
Preview not supported for this type; attached as reference.
'; } } function dataUrlToBytes(dataUrl){ var b64=dataUrl.split(',')[1];var bin=atob(b64); var arr=new Uint8Array(bin.length); for(var i=0;iPDF renderer unavailable (needs internet on first load).';return;} try{ pdfjsLib.getDocument({data:dataUrlToBytes(dataUrl)}).promise.then(function(pdf){ var maxPages=Math.min(pdf.numPages,30); var pageTexts=new Array(maxPages),done=0; function assemble(){ var fullText=pageTexts.join('\n').trim(); // Scanned PDF check: virtually no text layer -> fall back to page images if(fullText.replace(/\s+/g,'').length<40){ holder.innerHTML=head+'
This PDF is a scanned image (no text layer) — showing pages as images instead. For editable text, use a digitally created PDF or .docx.
'; renderPdfAsImages(holder,pdf,head); return; } var out=head+'
'+esc(fullText)+'
'; if(pdf.numPages>maxPages)out+='
…'+(pdf.numPages-maxPages)+' more page(s) not extracted
'; holder.innerHTML=out; showNotif('PDF text extracted — fully editable on the page'); } for(let p=1;p<=maxPages;p++){ pdf.getPage(p).then(function(page){ page.getTextContent().then(function(tc){ // Rebuild lines using Y positions; paragraph break on big gaps var lines=[],lastY=null,buf=[]; tc.items.forEach(function(it){ var y=Math.round(it.transform[5]); if(lastY!==null&&Math.abs(y-lastY)>3){ lines.push(buf.join('')); if(Math.abs(y-lastY)>18)lines.push(''); buf=[]; } buf.push(it.str); if(it.hasEOL){lines.push(buf.join(''));buf=[];} lastY=y; }); if(buf.length)lines.push(buf.join('')); pageTexts[p-1]=lines.join('\n'); done++;if(done===maxPages)assemble(); }); }); } }).catch(function(){holder.innerHTML=head+'
Could not read PDF.
';}); }catch(e){holder.innerHTML=head+'
Could not read PDF.
';} } function renderPdfAsImages(holder,pdf,head){ var maxPages=Math.min(pdf.numPages,10),done=0,slots=new Array(maxPages); var note=holder.innerHTML; // keep the scanned note for(let p=1;p<=maxPages;p++){ pdf.getPage(p).then(function(page){ var vp=page.getViewport({scale:1.35}); var cv=document.createElement('canvas');cv.width=vp.width;cv.height=vp.height; page.render({canvasContext:cv.getContext('2d'),viewport:vp}).promise.then(function(){ slots[p-1]=''; done++; if(done===maxPages){ holder.innerHTML=note+slots.join('')+(pdf.numPages>maxPages?'
…'+(pdf.numPages-maxPages)+' more page(s) not shown
':''); } }); }); } } function renderDocxInto(holder,dataUrl,head){ if(!window.mammoth){holder.innerHTML=head+'
Word renderer unavailable (needs internet on first load).
';return;} try{ mammoth.convertToHtml({arrayBuffer:dataUrlToBytes(dataUrl).buffer}).then(function(res){ holder.innerHTML=head+'
'+res.value+'
'; }).catch(function(){holder.innerHTML=head+'
Could not extract Word content \u2014 use .docx (not legacy .doc), PDF, or image.
';}); }catch(e){holder.innerHTML=head+'
Could not extract content.
';} } function openLibPicker(slot){ if(event&&event.target&&(event.target.classList.contains('af-del')||event.target.closest('.attached-file')))return; pendingSlot=slot; var g=document.getElementById('lib-picker-grid'); if(!libItems.length){ g.innerHTML='

Library is empty. Add documents in Company library first, or drag files directly onto the slot.

'; }else{ g.innerHTML=libItems.map(function(it){ var icon=it.type==='application/pdf'?'ti-file-type-pdf':it.type.indexOf('image')===0?'ti-photo':'ti-file'; return '
'+esc(it.name)+'
'+Math.round(it.size/1024)+' KB
'; }).join(''); } document.getElementById('lib-picker').classList.add('open'); } function pickFromLib(id){ var it=libItems.find(function(x){return x.id===id;}); if(it&&pendingSlot)slotAttachItem(pendingSlot,it.name,it.type,it.data); document.getElementById('lib-picker').classList.remove('open'); } function pickerDeviceUpload(e){ Array.from(e.target.files).forEach(function(f){ var r=new FileReader(); r.onload=function(ev){ if(pendingSlot)slotAttachItem(pendingSlot,f.name,f.type,ev.target.result); libItems.push({cat:(document.getElementById('lib-cat')?document.getElementById('lib-cat').value:'Other'),id:'lib'+Date.now()+Math.floor(Math.random()*999),name:f.name,size:f.size,type:f.type,data:ev.target.result}); renderLib(); }; r.readAsDataURL(f); }); document.getElementById('lib-picker').classList.remove('open'); showNotif('Content inserted and saved to library'); } /* ============ EDITOR ============ */ function execCmd(c,val){document.execCommand(c,false,val||null);} function insertEdTable(){document.execCommand('insertHTML',false,'
Col 1Col 2Col 3

');} function insEditorImg(e){ var f=e.target.files[0];if(!f)return; var r=new FileReader(); r.onload=function(ev){document.execCommand('insertHTML',false,'
');showNotif('Image inserted');}; r.readAsDataURL(f); } function insertAttachSlot(){ var label=prompt('Attachment slot label:','Supporting document'); if(!label)return; document.execCommand('insertHTML',false,attachSlot(label)); } /* ============ EXPORT ============ */ function openExportModal(){ if(!currentDocId&&!document.getElementById('view-doceditor').classList.contains('active')){ showNotif('Open a document first');return; } document.getElementById('export-modal').classList.add('open'); } function selExport(f){exportFmt=f; document.getElementById('exp-pdf').classList.toggle('sel',f==='pdf'); document.getElementById('exp-doc').classList.toggle('sel',f==='doc'); } function pageHTMLFor(docId){ var def=findDoc(docId); var co=(v('s-company')||'YOUR COMPANY LIMITED').toUpperCase(); var itt=v('s-ittno')||'[ITT Number]'; var title=v('s-title')||'[Tender Title]'; var bodyContent; if(docId===currentDocId){ var live=document.getElementById('active-doc-body'); bodyContent=live?live.innerHTML:(docContents[docId]||docBody(def)); }else bodyContent=docContents[docId]||docBody(def); var stack=''; if(logoDataUrl)stack+=''; if(clientLogoDataUrl)stack+=''; var logoH=stack?'
'+stack+'
':''; var mode=wmMode(),wmH=''; if(mode==='logo'&&logoDataUrl)wmH='
'; else if(mode==='custom'&&wmImageDataUrl)wmH='
'; else if(mode==='text'){var wm=v('s-watermark')||v('s-company')||'COMPANY';wmH='
'+esc(wm)+'
';} var sgn=sigDataUrl?'SIGN: ':'SIGN: '; return '
' +wmH +'
'+logoH+'
Invitation To Tender No.: '+esc(itt)+'
'+esc(def.code)+' — '+esc(def.name)+'
' +'
'+bodyContent+'
' +'
'+esc(co)+'
'+sgn+'
'+esc(title)+'
' +'
'; } var EXPORT_CSS='body{font-family:Calibri,Arial,sans-serif;margin:0;background:#fff}' +'.page{position:relative;padding:34px 60px 26px;page-break-after:always;min-height:1000px;display:flex;flex-direction:column}' +'.wm{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:0}' +'.wm span{font-size:90px;font-weight:700;color:rgba(150,150,150,.12);transform:rotate(-35deg);white-space:nowrap;font-family:"Segoe Script","Brush Script MT",cursive}' +'.hd{display:flex;justify-content:space-between;align-items:flex-start;padding-bottom:10px;position:relative;z-index:1}' +'.hd-r{text-align:right;font-size:11px;line-height:1.6}' +'.bd{flex:1;font-size:12.5px;line-height:1.85;position:relative;z-index:1}' +'.bd h1{font-size:16px;text-align:center;text-decoration:underline;margin:12px 0 16px}' +'.bd h2{font-size:13.5px;margin:15px 0 7px}' +'.bd table{width:100%;border-collapse:collapse;margin:11px 0;font-size:12px}' +'.bd td,.bd th{border:1px solid #999;padding:6px 9px;vertical-align:top}' +'.bd th{background:#f0f0f0;text-align:left}' +'.bd .fill-line{display:inline-block;border-bottom:1px dotted #555;min-width:170px;padding:0 6px}' +'.bd .attach-slot{border:1.5px dashed #a7c5fd;border-radius:8px;padding:12px;text-align:center;color:#6b8fd8;font-size:11.5px;margin:9px 0}' +'.bd .attached-file{display:flex;gap:8px;padding:6px 10px;background:#f0fdf4;border:1px solid #86efac;border-radius:6px;margin:6px 0;font-size:12px;align-items:center}' +'.ft{margin-top:auto;position:relative;z-index:1;font-size:10.5px}' +'.ftl{border-top:1.5px solid #1a1a1a;padding-top:8px;display:flex;justify-content:space-between;align-items:flex-end;gap:14px}' +'.ft-left b{display:block;font-size:11px}' +'.sig{display:inline-block;border-bottom:1px dotted #555;min-width:110px;height:12px}' +'.ft-c{text-align:center;color:#6b7280;flex:1;font-style:italic}' +'@media print{.page{page-break-after:always}}'; function doExport(){ document.getElementById('export-modal').classList.remove('open'); saveCurrentDoc(); var def=findDoc(currentDocId); var pageHTML=pageHTMLFor(currentDocId); var fname=(def.code.replace(/\s+/g,'-'))+'_'+(v('s-company')||'tender').replace(/\s+/g,'-'); exportPayload(pageHTML,fname,def.code+' — '+def.name); } function exportAll(){ saveCurrentDoc(); var all=activeDocs().concat(activeApps()).concat(customDocs).map(function(d){return pageHTMLFor(d.id);}).join(''); exportPayload(all,'Complete-Tender-Package_'+(v('s-company')||'company').replace(/\s+/g,'-'),'Complete tender package'); } var EXPORT_CSS='body{font-family:Calibri,Arial,sans-serif;margin:0;background:#fff}.page{position:relative;padding:34px 60px 26px;page-break-after:always;min-height:1000px;display:flex;flex-direction:column}.wm{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:0}.wm span{font-size:90px;font-weight:700;color:rgba(150,150,150,.12);transform:rotate(-35deg);white-space:nowrap}.hd{display:flex;justify-content:space-between;align-items:flex-start;padding-bottom:10px;z-index:1}.hd-r{text-align:right;font-size:11px;line-height:1.6}.bd{flex:1;font-size:12.5px;line-height:1.85;z-index:1}.bd h1{font-size:16px;text-align:center;text-decoration:underline;margin:12px 0 16px}.bd h2{font-size:13.5px;margin:15px 0 7px}.bd table{width:100%;border-collapse:collapse;margin:11px 0;font-size:12px}.bd td,.bd th{border:1px solid #999;padding:6px 9px;vertical-align:top}.bd th{background:#f0f0f0;text-align:left}.ft{margin-top:auto;z-index:1;font-size:10.5px}.ftl{border-top:1.5px solid #1a1a1a;padding-top:8px;display:flex;justify-content:space-between;align-items:flex-end}.ft-left b{display:block;font-size:11px}.sig{display:inline-block;border-bottom:1px dotted #555;min-width:110px;height:12px}.ft-c{text-align:center;color:#6b7280;flex:1;font-style:italic}'; function openExportModal(){ if(!currentDocId&&!document.getElementById('view-doceditor').classList.contains('active')){showNotif('Open a document first');return;} document.getElementById('export-modal').classList.add('open'); } function selExport(f){exportFmt=f; document.getElementById('exp-pdf').classList.toggle('sel',f==='pdf'); document.getElementById('exp-doc').classList.toggle('sel',f==='doc'); } function exportPayload(inner,fname,title){ if(exportFmt==='doc'){ var docHtml=''+esc(title)+''+inner+''; var blob=new Blob(['\ufeff'+docHtml],{type:'application/msword;charset=utf-8'}); var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=fname+'.doc'; document.body.appendChild(a);a.click();document.body.removeChild(a); showNotif('Word document downloaded'); }else{ var doc=''+esc(title)+''+inner+''; var fr=document.createElement('iframe'); fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0'; document.body.appendChild(fr); var fd=fr.contentWindow.document; fd.open();fd.write(doc);fd.close(); setTimeout(function(){ try{fr.contentWindow.focus();fr.contentWindow.print();} catch(e){alert('Print failed — allow pop-ups or use Word export.');} setTimeout(function(){fr.remove();},4000); },600); showNotif('Print dialog opening — choose Save as PDF'); } } function doExport(){ document.getElementById('export-modal').classList.remove('open'); saveCurrentDoc(); var def=findDoc(currentDocId); var pageHTML=pageHTMLFor(currentDocId); var fname=(def.code.replace(/\s+/g,'-'))+'_'+(v('s-company')||'tender').replace(/\s+/g,'-'); exportPayload(pageHTML,fname,def.code+' - '+def.name); } function exportAll(){ saveCurrentDoc(); var all=activeDocs().concat(activeApps()).concat(customDocs).map(function(d){return pageHTMLFor(d.id);}).join(''); exportPayload(all,'Complete-Tender-Package_'+(v('s-company')||'company').replace(/\s+/g,'-'),'Complete tender package'); } function v(id){var el=document.getElementById(id);return el?el.value.trim():'';} function esc(s){return String(s).replace(/&/g,'&').replace(//g,'>');} function showNotif(msg){ var n=document.getElementById('notif'); document.getElementById('notif-msg').innerText=msg; n.classList.add('show');setTimeout(function(){n.classList.remove('show');},2400); } /* ============ OFFICE DOCUMENTS ============ */ function _r(cells){return ''+cells.map(function(c){return ''+(c||' ')+'';}).join('')+'';} var OFFICE_TEMPLATES=[ {id:'invoice',name:'Invoice',cat:'Billing',icon:'ti-file-invoice',color:'#2563eb', desc:'Tax invoice with item table, VAT and bank details. The document you send to get paid.', body:'

INVOICE

' +'' +'' +'
Invoice No.INV-2026-001Date
From[Your company]
[Address]
RC: [number]
Bill to[Client name]
[Address]
Your ref Due date
' +'' +_r(['1','','','',''])+_r(['2','','','',''])+_r(['3','','','',''])+_r(['4','','','','']) +'' +'' +'' +'
S/NDescriptionQtyUnit Price (₦)Amount (₦)
Sub-total
VAT (7.5%)
WHT deduction (if any)
TOTAL DUE
' +'

Amount in words:

' +'

Payment details

' +'
Account name
Bank
Account number
' +'

Thank you for your business. Payment due within the stated terms.

'}, {id:'receipt',name:'Payment receipt',cat:'Billing',icon:'ti-receipt-2',color:'#0369a1', desc:'Acknowledge payment received. Issue after an invoice is settled.', body:'

PAYMENT RECEIPT

' +'' +'' +'' +'' +'
Receipt No.RCP-2026-001Date
Received from[Client name]
The sum of (₦) In words
Being payment for[Invoice ref / description]
Payment methodBank transfer / Cash / ChequeInvoice ref
' +'
___________________
Received by
___________________
Authorised signature & stamp
'}, {id:'lpo',name:'Purchase order (LPO)',cat:'Procurement',icon:'ti-shopping-cart',color:'#b45309', desc:'Issue a formal purchase order to a supplier or sub-vendor.', body:'

PURCHASE ORDER

' +'' +'' +'
PO No.PO-2026-001Date
Issued by[Your company]Supplier[Supplier name]
Deliver to[Delivery address]Required by
' +'' +_r(['1','','','','',''])+_r(['2','','','','',''])+_r(['3','','','','','']) +'' +'' +'
S/NItem / serviceUnitQtyUnit Price (₦)Amount (₦)
Sub-total
VAT (7.5%)
TOTAL
' +'

Terms: Payment net 30 days from delivery. Goods to conform to specification.

' +'
Authorised byDate
'}, {id:'nda',name:'Non-Disclosure Agreement',cat:'Contracts',icon:'ti-file-shield',color:'#7e22ce', desc:'Mutual NDA under Nigerian law. Use before sharing confidential business information.', body:'

NON-DISCLOSURE AGREEMENT

' +'

This Non-Disclosure Agreement ("Agreement") is made on [date] BETWEEN [Party A name], of [address] AND [Party B name], of [address] (together "the Parties").

' +'

1. Purpose

The Parties wish to explore a potential business relationship and may disclose confidential information to each other.

' +'

2. Confidential Information

"Confidential Information" means any information disclosed by one party to the other, whether orally, in writing or otherwise, that is designated confidential or would reasonably be understood to be confidential.

' +'

3. Obligations

Each party shall: (a) keep the Confidential Information strictly confidential; (b) not disclose it to any third party without prior written consent; (c) use it solely for the stated purpose; and (d) return or destroy it on request.

' +'

4. Exclusions

This Agreement does not apply to information that is publicly available, already known, or independently developed without breach of this Agreement.

' +'

5. Duration

The obligations herein survive for [3] years from the date of disclosure.

' +'

6. Governing Law

This Agreement is governed by the laws of the Federal Republic of Nigeria.

' +'' +'
Signed for Party ASigned for Party B
Name:
Signature:
Date:
Name:
Signature:
Date:
'}, {id:'service_agr',name:'Service Agreement',cat:'Contracts',icon:'ti-file-text',color:'#7e22ce', desc:'Contract between a service provider and client. Covers scope, payment, duration.', body:'

SERVICE AGREEMENT

' +'

This Service Agreement is made on [date] BETWEEN [Service Provider], of [address] ("the Contractor") AND [Client], of [address] ("the Client").

' +'

1. Scope of Services

The Contractor shall provide the following services: [describe services in detail].

' +'

2. Duration

This Agreement commences on [start date] and continues until [end date] unless terminated earlier in accordance with clause 6.

' +'

3. Consideration & Payment

The Client shall pay the Contractor ₦[amount] payable [schedule]. All fees are exclusive of applicable taxes.

' +'

4. Obligations of the Contractor

The Contractor shall perform the services with reasonable skill and care and in compliance with applicable Nigerian laws and regulations.

' +'

5. Confidentiality

Each party shall keep confidential all information obtained under this Agreement.

' +'

6. Termination

Either party may terminate on [30] days written notice. Either party may terminate immediately for material breach.

' +'

7. Governing Law

This Agreement is governed by the laws of the Federal Republic of Nigeria and disputes shall be resolved by arbitration in [city].

' +'' +'
The ContractorThe Client
Name:
Designation:
Signature & date:
Name:
Designation:
Signature & date:
'}, {id:'board_res',name:'Board Resolution',cat:'Corporate',icon:'ti-gavel',color:'#0891b2', desc:'CAC-style board resolution — opening accounts, appointing directors, authorising signatories.', body:'

[COMPANY NAME] LIMITED

RC: [number]

EXTRACT OF RESOLUTION OF THE BOARD OF DIRECTORS

' +'

At a meeting of the Board of Directors of the above-named Company held on [date] at [venue], the following resolutions were passed:

' +'

IT WAS RESOLVED THAT:

' +'
  1. [State the first resolution — e.g. a corporate account be opened with [Bank]].
  2. ' +'
  3. The following persons be and are hereby authorised as signatories to the account: [names & designations].
  4. ' +'
  5. [Any further resolution].
' +'

The above resolutions were duly proposed, seconded and carried.

' +'' +'
DirectorDirector / Secretary
Name:
Signature:
Name:
Signature:
'}, {id:'company_profile',name:'Company Profile',cat:'Marketing',icon:'ti-building',color:'#16a34a', desc:'Multi-section company profile sent with every bid — about, capabilities, clients, HSE.', body:'

[COMPANY NAME]

[Your tagline — e.g. Excellence in Oilfield Services]

' +'

1. About Us

[Company name] is a wholly Nigerian-owned company incorporated in [year], specialising in [core services]. We are registered with NCDMB (NOGIC JQS), NUPRC, and hold [certifications].

' +'

2. Our Vision & Mission

Vision: [Your vision statement]

Mission: [Your mission statement]

' +'

3. Core Capabilities

' +'

4. Track Record

'+_r(['','','',''])+_r(['','','',''])+_r(['','','',''])+'
ProjectClientYearValue/Scope
' +'

5. Key Personnel

'+_r(['','','',''])+_r(['','','',''])+'
NameRoleQualificationExperience
' +'

6. Health, Safety & Environment

[Company name] operates a robust HSE management system aligned with ISO 45001 and NCDMB requirements. Our LTI-free record stands at [X] man-hours.

' +'

7. Certifications & Registrations

' +'

8. Contact

Address: [full address]
Phone: [numbers]
Email: [email]
Website: [website]

'} ]; function renderOfficeTemplates(){ var g=document.getElementById('office-templates');if(!g)return; var cats={}; OFFICE_TEMPLATES.forEach(function(t){(cats[t.cat]=cats[t.cat]||[]).push(t);}); var out=''; Object.keys(cats).forEach(function(cat){ out+='
'+cat+'
'; cats[cat].forEach(function(t){ out+='
'+t.name+'
'+t.desc+'
'; }); }); g.innerHTML=out; } function openOffice(id){ var t=OFFICE_TEMPLATES.find(function(x){return x.id===id;});if(!t)return; document.getElementById('oe-title').innerHTML=' '+t.name; document.getElementById('office-body').innerHTML=t.body; document.getElementById('office-editor-area').style.display='block'; } function exportOffice(fmt){ var inner=document.getElementById('office-body').innerHTML; var css='body{font-family:Calibri,sans-serif;margin:40px 60px;font-size:13px;line-height:1.85}table{width:100%;border-collapse:collapse;margin:12px 0}td,th{border:1px solid #999;padding:6px 9px;vertical-align:top}th{background:#f0f0f0;text-align:left}h1{font-size:20px;text-align:center}h2{font-size:14px;margin:16px 0 7px;color:#0F2B4C}ul,ol{margin:0 0 10px 22px}'; if(fmt==='doc'){var blob=new Blob(['\ufeff'+inner+''],{type:'application/msword'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='Document.doc';document.body.appendChild(a);a.click();a.remove();showNotif('Word exported');} else{var fr=document.createElement('iframe');fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0';document.body.appendChild(fr);var fd=fr.contentWindow.document;fd.open();fd.write(''+inner+'');fd.close();setTimeout(function(){try{fr.contentWindow.focus();fr.contentWindow.print();}catch(e){}setTimeout(function(){fr.remove();},4000);},600);showNotif('Print — choose Save as PDF');} } /* ============ COMPLIANCE CHECKER ============ */ var COMP_SECTIONS=[ {cat:'Corporate & statutory (Public Procurement Act)',items:[ {id:'c1',q:'CAC Certificate of Incorporation is valid and available',w:3,fix:'Obtain/renew via CAC. Every tender requires certified true copies.'}, {id:'c2',q:'CAC Forms CO2 (share allotment) and CO7 (directors) available',w:3,fix:'Request certified copies from CAC — evaluators use these to verify >51% Nigerian equity.'}, {id:'c3',q:'Annual returns filed with CAC and up to date',w:2,fix:'File outstanding annual returns — an inactive status disqualifies bids.'}, {id:'c4',q:'Tax Clearance Certificate for the last 3 years',w:3,fix:'Apply through FIRS/State IRS. Three consecutive years is the standard requirement.'}, {id:'c5',q:'PENCOM Compliance Certificate (current year)',w:2,fix:'Obtain from PENCOM — mandatory under the Pension Reform Act for public contracts.'}, {id:'c6',q:'ITF Compliance Certificate (current year)',w:2,fix:'Register and remit with the Industrial Training Fund.'}, {id:'c7',q:'NSITF Compliance Certificate (current year)',w:2,fix:'Register with NSITF under the Employee Compensation Act.'}, {id:'c8',q:'BPP Interim Registration Report (IRR) obtained',w:2,fix:'Register on NOCOPO/BPP portal — required for federal government contracts.'}, {id:'c9',q:'Sworn affidavit (no conviction, not bankrupt, documents genuine) prepared',w:2,fix:'Swear before a Commissioner for Oaths — template available in Bid preparation.'}]}, {cat:'Nigerian Content (NOGICD Act 2010 / NCDMB)',items:[ {id:'n1',q:'Company is Nigerian-registered with more than 51% Nigerian equity',w:3,fix:'Restructure shareholding — below 51% you cannot qualify as a Nigerian company under the Act.'}, {id:'n2',q:'NCDMB NOGIC JQS registration is LIVE (not lapsed)',w:3,fix:'Renew your JQS subscription — a lapsed category is an automatic fatal flaw on NipeX.'}, {id:'n3',q:'Valid Nigerian Content Equipment Certificate (NCEC) held for your category',w:2,fix:'Apply via NCDMB for the correct MS/SS/EC category covering your scope.'}, {id:'n4',q:'Project-specific organogram with names, roles and nationalities prepared',w:2,fix:'Prepare an organogram with CVs attached — required in most technical submissions.'}, {id:'n5',q:'Human Capacity Development plan via an OGTAN-registered trainer',w:2,fix:'Sign an undertaking with an OGTAN-registered training provider.'}, {id:'n6',q:'Expatriate quota position documented (approval or a nil-expatriate declaration)',w:1,fix:'Obtain approval from the Ministry of Interior, or state clearly that no expatriates are used.'}, {id:'n7',q:'Nigerian Content Plan showing local sourcing and local labour commitments',w:2,fix:'Prepare an NC Plan quantifying Nigerian spend, staff and materials.'}]}, {cat:'HSE & operations',items:[ {id:'h1',q:'Written HSE policy signed by the Managing Director',w:2,fix:'Issue and sign an HSE policy statement — evaluators check for a current signature and date.'}, {id:'h2',q:'HSE statistics for the last 3 years (LTI, man-hours, incidents) documented',w:2,fix:'Compile records; an absent record is treated as poor performance.'}, {id:'h3',q:'Named, qualified HSE officer/manager in post',w:2,fix:'Appoint a competent HSE lead and attach their CV and certificates.'}, {id:'h4',q:'Valid insurance: workmen compensation, third-party, and equipment cover',w:2,fix:'Obtain policies from a NAICOM-licensed insurer and keep certificates current.'}]}, {cat:'Data protection (NDPA 2023 / NDPR)',items:[ {id:'d1',q:'A published privacy policy explains what personal data you collect and why',w:3,fix:'Publish a privacy notice covering data collected, lawful basis, retention and data-subject rights.'}, {id:'d2',q:'You have a lawful basis (consent, contract, legal duty) for staff and client data',w:3,fix:'Document the lawful basis for each processing activity — a written record is expected.'}, {id:'d3',q:'A Data Protection Officer or a responsible person has been designated',w:2,fix:'Designate a DPO or a named responsible officer; larger processors must formally appoint one.'}, {id:'d4',q:'Staff who handle personal data have received basic data-protection training',w:2,fix:'Run short annual training and keep an attendance record as evidence.'}, {id:'d5',q:'Personal data is stored securely (access control, passwords, encryption or locked files)',w:3,fix:'Restrict access, use strong passwords, and encrypt or lock away CVs, IDs and payroll records.'}, {id:'d6',q:'A breach response procedure exists (NDPA requires notification within 72 hours)',w:2,fix:'Write a short breach procedure naming who is alerted and how the NDPC is notified within 72 hours.'}, {id:'d7',q:'Data-processing agreements exist with vendors handling your data (payroll, IT, HR)',w:2,fix:'Sign written processing agreements with third parties that handle personal data for you.'}, {id:'d8',q:'You can respond to data-subject requests (access, correction, deletion)',w:2,fix:'Create a simple log and process for handling requests within statutory timelines.'}, {id:'d9',q:'Annual data-protection audit filed with the NDPC where required',w:2,fix:'Major data controllers must file an annual audit via a licensed DPCO — check whether your volumes qualify.'}]} ]; function renderCompliance(){ var f=document.getElementById('comp-form');if(!f)return; if(f.dataset.built)return; var out=''; COMP_SECTIONS.forEach(function(s){ out+='
'+s.cat+'
'; s.items.forEach(function(it){ out+='
' +'' +'
'+it.q+'
'; }); }); f.innerHTML=out; f.dataset.built='1'; } function runCompliance(){ var got=0,max=0,gaps=[],prog=[]; COMP_SECTIONS.forEach(function(s){ s.items.forEach(function(it){ var el=document.getElementById(it.id); if(!el)return; var v=el.value; if(v==='na')return; max+=it.w; if(v==='y')got+=it.w; else if(v==='p'){got+=it.w*0.5;prog.push({s:s.cat,q:it.q,fix:it.fix});} else gaps.push({s:s.cat,q:it.q,fix:it.fix,w:it.w}); }); }); var pct=max?Math.round(got/max*100):0; var band=pct>=85?['Strong','#16a34a','#f0fdf4']:pct>=60?['Adequate — gaps to close','#b45309','#fffbeb']:['High risk — act now','#dc2626','#fef2f2']; gaps.sort(function(a,b){return b.w-a.w;}); var html='
Compliance report
' +'
' +'
'+pct+'%
' +'
'+band[0]+'
' +'
'+gaps.length+' gap(s) to close, '+prog.length+' in progress
'; if(gaps.length){ html+='
PRIORITY GAPS — highest weight first
'; gaps.forEach(function(g){ html+='
' +'
'+g.q+'
' +'
'+g.s+'
' +'
Action: '+g.fix+'
'; }); } if(prog.length){ html+='
IN PROGRESS — finish these
'; prog.forEach(function(g){ html+='
' +'
'+g.q+'
' +'
'+g.fix+'
'; }); } if(!gaps.length&&!prog.length)html+='

No gaps recorded. Keep certificates current and re-run before each submission.

'; html+='
' +'

This is a self-assessment aid, not legal advice. Verify current requirements with CAC, NCDMB, FIRS and the NDPC, and consult a professional for anything material.

'; document.getElementById('comp-result').innerHTML=html; document.getElementById('comp-result').scrollIntoView({behavior:'smooth'}); } function exportCompliance(){ var inner=document.getElementById('comp-result').innerHTML.replace(//g,''); var css='body{font-family:Calibri,sans-serif;margin:40px 55px;font-size:13px;line-height:1.7}h1{font-size:19px;color:#0F2B4C}'; var doc='Compliance report

BidCrest Compliance Report

Generated '+new Date().toLocaleDateString()+'

'+inner+''; var fr=document.createElement('iframe');fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0'; document.body.appendChild(fr);var fd=fr.contentWindow.document;fd.open();fd.write(doc);fd.close(); setTimeout(function(){try{fr.contentWindow.focus();fr.contentWindow.print();}catch(e){}setTimeout(function(){fr.remove();},4000);},600); showNotif('Print dialog — choose Save as PDF'); } /* ============ QUOTES ============ */ var QUOTE_TEMPLATES=[ {id:'std',name:'Standard quotation',desc:'Item table with terms and validity — the most common format.', body:'

QUOTATION

FromTo
[Your company]
[Address]
[Phone/Email]
[Client name]
[Address]
Ref Date

RE: Quotation for [describe goods/services]

S/NDescriptionUnitQtyUnit Price (₦)Amount (₦)
1
2
3
4
5
Sub-total
VAT (7.5%)
Grand Total

Terms

  1. Valid for 30 days.
  2. Payment: 50% advance, balance on delivery.
  3. Delivery: [X] working days from PO.

Yours faithfully,

[Name, Designation, Company]

'}, {id:'proforma',name:'Proforma invoice',desc:'For advance payment processing or raising a purchase order.', body:'

PROFORMA INVOICE

Invoice No.PI-2026-001Date
From[Your company]To[Client]
S/NItemUnitQtyRate (₦)Amount (₦)
1
2
3
Total

Bank:

Account name
Bank
Account no.

Valid for 14 days.

'}, {id:'service',name:'Service quote (labour + materials)',desc:'Separates labour, materials and logistics — common for well services and fabrication.', body:'

SERVICE QUOTATION

ContractorClient
[Company][Client]

A. Labour

S/NRoleNo.DaysDay rate (₦)Amount
1
2
Labour sub-total

B. Materials

S/NMaterialUnitQtyCost (₦)Amount
1
Materials sub-total

C. Logistics

ItemAmount (₦)
Mobilisation
Logistics sub-total
Grand Total
VAT
Total incl. VAT
'}, {id:'lpo',name:'Local purchase order (LPO)',desc:'Mirrors LPO layout some clients require for internal approval.', body:'

LOCAL PURCHASE ORDER

LPO No.LPO-2026-001Date
Vendor[Your company]Deliver to[Site]
S/NDescriptionUnitQtyPrice (₦)Amount (₦)
1
2
Total

Delivery: [X] working days

Payment: Net 30 days

Authorised byApproved byReceived by
'}, {id:'rfq',name:'RFQ response cover letter',desc:'Formal letter responding to a Request for Quotation — wraps around any price schedule.', body:'
[Your company letterhead]
[Address]
[Date]

[Client name]
[Client address]

Attention: [Procurement Manager]

RE: RESPONSE TO RFQ - [Reference / Title]

Dear Sir/Madam,

We refer to your RFQ and submit our pricing as attached.

  1. Scope: [Describe scope]
  2. Location: [Site]
  3. Timeline: [Period]
  4. Validity: [30/60/90] days.

Prices are in Naira, exclusive of WHT, inclusive of VAT.

Yours faithfully,

[Name]
[Designation]
[Company]

'} ]; function renderQuoteTemplates(){ var g=document.getElementById('quote-templates');if(!g)return; var icons=['ti-file-text','ti-receipt-2','ti-tool','ti-shopping-cart','ti-mail']; var colors=['#2563eb','#16a34a','#b45309','#7e22ce','#0369a1']; g.innerHTML=QUOTE_TEMPLATES.map(function(q,i){ return '
'+q.name+'
'+q.desc+'
'; }).join(''); } function openQuote(id){ var q=QUOTE_TEMPLATES.find(function(t){return t.id===id;});if(!q)return; document.getElementById('qe-title').innerHTML=' '+q.name; document.getElementById('quote-body').innerHTML=q.body; document.getElementById('quote-editor-area').style.display='block'; } function exportQuote(fmt){ var inner=document.getElementById('quote-body').innerHTML; var css='body{font-family:Calibri,sans-serif;margin:40px 60px;font-size:13px;line-height:1.85}table{width:100%;border-collapse:collapse;margin:12px 0}td,th{border:1px solid #999;padding:6px 9px;vertical-align:top}th{background:#f0f0f0;text-align:left}h1{font-size:18px;text-align:center}h2{font-size:14px;margin:16px 0 7px}'; if(fmt==='doc'){var blob=new Blob(['\ufeff'+inner+''],{type:'application/msword'});var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='Quote.doc';document.body.appendChild(a);a.click();a.remove();showNotif('Word exported');} else{var fr=document.createElement('iframe');fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0';document.body.appendChild(fr);var fd=fr.contentWindow.document;fd.open();fd.write(''+inner+'');fd.close();setTimeout(function(){try{fr.contentWindow.focus();fr.contentWindow.print();}catch(e){}setTimeout(function(){fr.remove();},4000);},600);showNotif('Print — choose Save as PDF');} } renderDocNav(); renderLib(); renderClients(); renderIssuers(); renderOpps(); renderDirectory(); renderPosts(); renderQuoteTemplates(); Object.keys(LOGOS).forEach(function(k){var el=document.getElementById('glogo-'+k);if(el)el.src=LOGOS[k];}); function insertFromLib(targetId){ if(!libItems.length){alert('Your company library is empty. Go to Company library and upload documents first.');return;} var names=libItems.map(function(it,i){return (i+1)+'. ['+(it.cat||'Other')+'] '+it.name;}).join('\n'); var pick=prompt('Insert which document?\n\n'+names+'\n\nEnter number:'); var idx=parseInt(pick,10)-1; if(isNaN(idx)||!libItems[idx])return; var it=libItems[idx]; var el=document.getElementById(targetId); var html=''; if(it.type&&it.type.indexOf('image')>=0)html='
'+esc(it.name)+'
'; else if(it.text)html='
'+esc(it.name)+'
'+esc(it.text).slice(0,4000).replace(/\n/g,'
')+'
'; else html='
Attached: '+esc(it.name)+'
'; el.innerHTML+=html; showNotif('Inserted: '+it.name); }