Novadesk CRM: Operations Platform for Virtual Office and Shared Workspace Providers
A vertical CRM and back-office platform for virtual office, shared office, and ready office providers in Turkey, covering contracts, package billing, meeting room reservations, and KVKK-aware data handling in a single role-based workspace.
Novadesk CRM is built for a niche generic sales CRMs do not serve: companies that sell virtual office, shared office, and ready office services. The interesting work in that business starts after the deal closes. Contracts get drafted, PDFs get generated and re-generated, packages get assigned, monthly meeting room hours get tracked, payments get reconciled, and renewals get reminded. Novadesk CRM puts all of that in one place with role-aware views, so a secretary, an accountant, and an admin each see exactly what they should.
The audience is concrete: virtual office and address service providers in Turkey, shared office and coworking operators billing by package and meeting hours, ready office and serviced office businesses managing multi-room inventories, and accounting offices, law firms, and consultancies that have to track customer contracts, mailing addresses, and meeting room usage in one place.
Contracts and documents:
- A single guided wizard captures the customer, authorized persons, package, pricing, and term, writes everything to the database, and triggers PDF generation in one step
- A set of service packages out of the box (Virtual Office Basic and Premium, Shared Office, multiple Ready Office tiers, and a Meeting Room only plan), each with its own pricing model, monthly meeting hour allocation, and contract template
- A serverless function renders the right contract template per package on insert and update, with versioned PDFs, iframe preview, and signed download URLs
- A bulk PDF regeneration queue reissues PDFs across the customer base when templates change, with job state (pending, processing, completed, failed) so a stale template never reaches a customer
Meeting room reservations:
- Reservations go through a database-side procedure that locks the time window, checks for overlaps, and verifies remaining hours in a single transaction
- Each package ships with a monthly hour quota tracked live through a database view, with a separate ledger for purchased extra hours
- Reservation creation, update, and cancellation events fan out as Turkish-language emails through templated content per event type
- A weekly calendar view with quick filters and CSV export for monthly reporting
Companies, people, and cargo:
- Companies carry tax office, tax number (Vergi No), and assigned phone allocations, along with authorized-person records that store TC Kimlik, phone, and email
- Incoming mail is logged with arrival and delivery status, dates, free-text notes, and the operator who handled it, giving customers a clear delivery audit trail
- A data table drives column filters, sort, pagination, and ready-made views like "expiring soon", "active", and "inactive", with CSV export for any filtered set
Finance and billing:
- Each contract tracks contract amount, paid amount, and outstanding balance, with a payment history table that syncs back to the contract on every entry
- System-level settings control the VAT rate and inclusive vs exclusive pricing, and all displayed totals recalculate accordingly
- A revenue dashboard surfaces total contract value, collected amount, outstanding receivables, monthly revenue trend, package mix, and contract status distribution
Roles, permissions, and KVKK:
- Three first-class roles: Admin sees everything, Muhasebeci (accountant) sees only the companies they manage, and Sekreter (secretary) handles contacts and reservations with financial fields hidden
- Row Level Security policies plus dedicated finance-free database views make sure the secretary role cannot see financial columns even if the UI is bypassed
- Customer contact data, TC Kimlik, and contract attachments live behind RLS, signed cloud storage URLs, and a hardened set of security headers at the edge
Reminders and automation:
- Scheduled jobs flag contracts that are about to expire and send reminder emails through the contract reminder pipeline
- Contract status transitions across active, inactive, expiring, expired, closure, and address-transfer states based on dates and operator actions, with no manual cleanup
- Customers approaching their monthly meeting hour ceiling are surfaced on the dashboard and triggered for outreach
Stack and operations:
- Next.js with the App Router and React, TypeScript end to end
- Supabase Postgres with versioned SQL migrations and a paired rollback file for each, plus Supabase Auth, Storage, and Edge Functions
- Tailwind CSS with shadcn/ui on top of Radix primitives, TanStack Table and TanStack Query for data, React Hook Form with Zod for validation
- Netlify with the Next.js plugin, automated deploys from GitHub, security headers and a secrets-scan allowlist baked into the deploy config
- A dedicated serverless function renders the per-package contract template into a branded PDF, decoupling rendering from the request lifecycle so the UI stays snappy even on bulk operations
- Job tables for PDF regeneration, a system settings surface for VAT and SMTP, and a contract notes and attachments layer that gives operators an audit trail per customer
The system replaces the usual stack (spreadsheets, Word templates, scattered inboxes) with a role-aware web app that respects KVKK and Turkish accounting realities.