Javis OS
Javis OS is an Agentic AI that assists entrepreneurs in business tasks, helping them grow their work.
AI translation
The professional publishing and booking platform built for African coaches, consultants, and knowledge professionals. Notes, calendar, and payments — one canvas.
BusinessTypeScript · JavaScriptGitHub @AceBoss1OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
#NotesApp fuses a publishing journal, a native booking calendar, and inline Naira payments into one workspace — so coaches, consultants, and therapists stop stitching together WhatsApp, a booking link, and a blog just to run their practice.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
⚠ Read "Independent infrastructure migration" before this
paragraph — it's the most recent, most important architectural
change, and it contradicts what's said immediately below. Everything
from here through the rest of this file was written while NotesApp
deliberately shared Precheks' Firebase project. As of the migration
section further down, that's no longer true — NotesApp has its own
Firestore project and its own Cloudflare R2 bucket.Read the full README ↗Where African creators, professionals and businesses publish, take bookings, sell and get paid in Naira. Next.js 14 (App Router) on Vercel, Firebase (Auth, Firestore), Cloudflare R2 and Stream, Paystack, Resend, Anthropic (Nana).
New here? Read HANDOVER.md first (how the work is done, what's waiting, the map of the code), then this page.
| Doc | What's in it |
|---|---|
HANDOVER.md | The state of the code, what's waiting on the owner, how the work is done, map of the code, tests, known gaps |
docs/ENVIRONMENT.md | Every setting (environment variable), made from lib/config.ts |
docs/DEPLOY.md | Deploy checklist, where to look when something's wrong, scripts |
docs/ENGINEERING_GUIDE.md | The founder's guide for the engineering team: principles, the Na- names, the stages and their dashboard triggers, recovery from a breach, Nana and the platform at scale |
docs/ARCHITECTURE.md | How the newer pieces work: addresses, bells, digest, server-owned writes, shared limits, settings |
docs/DOMAIN_SWITCH.md | Moving the primary address to notesapp.tech |
docs/STAGING.md | The staging copy and how a release goes |
docs/PAYMENTS.md | Who takes which payment: Paystack (cards, subscriptions, payout backup), Paylony (bank transfers, Tap2Pay), Flutterwave (across Africa, later); the one payment layer to build; NotesApp Inc |
docs/MOBILE-APPS.md | The iOS and Android release plan (Capacitor around the app address, store rules, accounts under NotesApp Inc); scaffold in mobile/ |
docs/SEND-NA.md | Send-Na by NotesApp: email, WhatsApp and SMS priced in Naira (plan only), and the WhatsApp and SMS channel booking reminders need |
docs/COURSES.md | The course platform plan (free YouTube courses, paid courses, certificates) |
docs/BUILD_LOG.md | The full history, in order (what used to be this README) |
lib/changelog.ts | Release notes, shown at /changelog |
| Area | What exists | Where to read more |
|---|---|---|
| Publishing | Journals (Markdown composer with toolbar and preview, drafts, premium posts), follow, likes, comments and replies, shares, co-authoring, organisation channels and teams, drag-and-drop or pasted pictures (JPEG and PNG go up as WebP, lib/upload.ts asWebp) | "Who can publish", "Organisation accounts", co-authoring in "Boosts & gifts" |
| Links and @mentions | Web addresses become links wherever members write (lib/linkify.ts, components/LinkedText.tsx, remarkLinkify for journals); link preview cards in Messages and Notes Life chat (/api/link-preview: signed in, public addresses only, every redirect re-checked, 512 KB / 5 s, cached 6 h); the @mention picker (components/MentionPicker.tsx, users by username prefix) in journals, comments, replies, messages, moment captions and Notes Life chat; @username links to /u/username | /help → "Links and @mentions" |
| Video on posts | One MP4/WebM per post (≤ 100 MB, ≤ 3 min, weekly allowance by plan), our own player, cover-image picker, server-verified uploads | "Video on posts" |
| Share previews | Per-post, per-store-item and per-store Open Graph cards | "Share previews (Open Graph)" |
| Shipments (logistics) | Logistics businesses on Business and Enterprise book shipments for their own customers (delivery, waybill, bulk, warehousing, home and office errands; each business picks its services), send receivers their tracking link on WhatsApp or SMS, hand parcels rider to rider with no-login links, and turn on a Track section on Your site (/track on their domain) | lib/shipments.ts, lib/shipments-server.ts, /shipments, /logistics |
| Logistics network | Providers list coverage (states), areas, services and a rate card (zone × weight); stores choose a delivery partner on /logistics/network; buyers pay the partner's price at checkout (a <ref>_ship ledger entry, released with the order); our commission comes only from the provider's earnings; Business/Enterprise included, the add-on (₦4,500/month, 30-day trial) on Free Basic and Pro | lib/logistics.ts, lib/logistics-server.ts, /api/logistics, help → "The logistics network" |
Payments across Africa (docs/PAYMENTS.md: Paylony virtual accounts, the one payment layer, Flutterwave for Ghana and Kenya) · Mobile apps (docs/MOBILE-APPS.md, scaffold in mobile/; waits on NotesApp Inc and its store accounts) · Send-Na (docs/SEND-NA.md: email, WhatsApp and SMS priced in Naira; WhatsApp booking reminders come with its phase 0) · The rest of Courses (docs/COURSES.md: quizzes, Enterprise Courses and the Enterprise Academy API) ·
Paid add-ons for Business and Enterprise, after internal testing: the team hub and team messaging, company finance tools (runway calculator, CAC and MRR, burn and revenue analytics, cap table and vesting), the investor and partner data room, and LinkedIn advertising (Advertising API development tier approved; advertisers boost a post on LinkedIn from their own ad account, with campaign stats) · WhatsApp reminders (plan: Meta WhatsApp Cloud API directly; booking reminders + delivery updates; needs Meta Business
verification and approved templates) · publishing to Facebook, Instagram and TikTok (LinkedIn and X are built) · MCP write tools (drafts from your AI assistant) and the Nana operator
(scoped; the work is on the team hub as the agent-layer backlog; MCP phase 1, read-only, is live) · AI notetaker ·
Paylony virtual accounts and bank payouts (client in lib/paylony.ts; the payout and reserved-account endpoints are not in yet) · domain sales and DNS management (Whogohost / go54) ·
Notes Life: Lagos, the conference hall, real players in the VIP bar · iOS/Android apps · video transcoding/streaming (we cap size and length instead) · Dojah live mode (README "Going live with Dojah") ·
webhook retries (one attempt, manual resend) · OAuth for third-party API apps · checkout and bookings in a popup on custom domains, and a sending address on the member's own domain (sign-in and sign-up in the member's name are live) ·
voice (Listen on journals, Nana reading aloud) · Sentry (we have built-in error monitoring instead).
npm ci
cp .env.local.example .env.local # Firebase web config and a service account at least (docs/ENVIRONMENT.md)
npm run dev # http://localhost:3000
npx tsc --noEmit # types (there is no ESLint config)
npm run test:rules # Firestore rules (needs Java; starts the emulator)
npm run test:life # Notes Life economy
npm run test:messages # message edits
npm run test:mentions # @mention bells
npm run test:digest # weekly digest
npm run test:authors # journal author backfill
npm run test:shared # shared rate limits and cache
npm run test:topics # topics, hashtags and the topic backfill
npm run test:ops # the stage-trigger numbers' arithmetic
npm run test:ops-server # gathering the stage-trigger numbers (emulator)
npm run test:pii # masked emails and phones in admin pages
npm run test:pii-server # reveal with a reason, the view log (emulators)
npm run test:maintenance # backfills: dry run, plan check, before-images, undo (emulator)
npm run test:backups # Admin → Backups: names, limits and the requests sent to Google
npm run test:discovery # For you, Most viewed and Recent shelves
npm run test:courses # Notes Academy: YouTube ids, slugs, progress
npm run test:courses-server # Notes Academy on the emulator: create, lessons, publish, enrol, progress
npm run test:preview # link-preview safety (listens on port 80)
npm run test:smoke # Playwright smoke test against a running site (SMOKE_BASE_URL)
npx -y tsx scripts/settings-doc.ts --check # settings read only through lib/config.ts; docs/ENVIRONMENT.md current
gitleaks git --config .gitleaks.toml --redact . # no keys or tokens anywhere in the history (CI job "secrets")
CI runs all of them on every pull request (.github/workflows/ci.yml).
| Free trials | 15 days, no card, from Pricing (/api/billing/trial, lib/trials.ts rules, lib/trials-server.ts): Pro and Business each once, a paid plan between two trials, only plans above the one paid for; expiry returns to the paid plan or Free Basic (lib/tier-billing.ts); add-on trials capped at 15 days | help → "Plans and prices" |
| Inventory | /profile/inventory (lib/inventory.ts pure, lib/inventory-server.ts, /api/inventory): stock per item and option, SKUs, cost prices and alert levels in inventory/{itemId}, every change in inventoryMoves (sales from lib/payments.ts, refunds, restocks, corrections), low-stock bells, CSV in and out; Business+ included, Free Basic and Pro the inventory_addon (₦1,500/month, 15-day trial) | help → "Inventory" |
| Community and Events | Audio rooms (lib/rooms.ts, host + 4 on stage, phone to phone, live chat), a group-style feed, /community (directory, Start a community), /c/<id> (lib/community.ts rules, lib/community-server.ts, /api/community): roles owner/admin/moderator/member, open/approval/invite joining with questions, General (admins post), public and members-only Spaces, Circles (group chats, Business), admin tools, insights, View as, and what non-members see (admins choose); /events and /events/<id> (lib/events.ts, lib/events-server.ts, /api/events, .ics): RSVP, repeats, Join live, reminders in the cron | docs/COMMUNITY.md, help → "Community", "Events" |
| Booking & money | Native calendar, Paystack checkout, escrow-style holds, automatic payouts, client rescheduling/cancellation + problem reports | "Payments, payouts, rates, reminders", "Money flow" |
| NotesApp Credit wallet | Top up ₦1,000 to ₦500,000 through Paystack (bonus credits on larger top-ups), pay with wallet or card or both, statement with filters, refunds to the wallet; switch: NEXT_PUBLIC_WALLET_LIVE | lib/wallet.ts, lib/wallet-server.ts, /help |
| Stores | Physical goods (managed stock, categories, "ships from", parcel IDs, rider links, tracking), digital downloads (private bucket, short-lived links), saved items ♡, featured item, store boosts, reviews from buyers who received the item (with seller replies), official merch pre-orders; organisation admins can add and edit items | "Seller checkout and parcel tracking", "Boosts & gifts", /store-selling |
| Analytics | /profile/analytics (lib/analytics.ts pure, lib/analytics-server.ts reads, /api/analytics): earnings, orders and checkouts, average order, best sellers, low stock, bookings, visits, boosts and adverts; 7 days for all, 30/90 days + customers + CSV on Pro, visits by page and source on Business; organisation teammates with store access. Visits roll up per owner per day in ownerViews/{uid}_{yyyymmdd} (lib/visits-server.ts) | docs/SITES.md, help → "Your analytics" |
| Sites | Every member from Free Basic has a site at /s/<username> (app/(site)), set up on Your site (/profile/site): kits (lib/site-kits.ts: Personal and Academics on Free Basic; Fashion, Food & baking, Services, Healthcare, Beauty and wellness (spa, massage, hair, nails), Fitness, Events, Electronics, Motor parts, Solar, Real estate on Pro; School and Church/NGO on Business), a cover photo on every look, team members tagged by @username, the looks Legacy, Clean, Scholar with dark mode (Free Basic), Luxe (full-photo opening), Aurora and Maroon (Pro); Home leads with the shop, services, courses, notes or a mix (focus) with colour sets and a Pro brand colour (lib/site-themes.ts, CSS variables behind the crimson colours), content sections (banner with buttons, hours and contacts, services, gallery, testimonials, team, answers, and the academic Publications, Awards, Talks on a canvas globe (components/site/TalksGlobe.tsx, lib/places.ts, lib/globe-land.ts) and In the news, with imports from BibTeX/Google Scholar, DOI (Crossref) and ORCID with a daily sync, lib/publications-import.ts) in sites/{uid} written by lib/site-server.ts, an announcement bar (sites/{uid}.announce), a basket (lib/cart.ts, lib/cart-client.ts, components/site/SiteBasket.tsx; one card payment, kind store_cart, settled as one ordinary store order per item), no WhatsApp order buttons, pages Journals, Shop (a storefront borrowed from Shopify's collection pages: collection links, featured piece, product count, search, sorting, grid size and product tiles shaped by kit, components/site/Storefront.tsx; a full-width cover banner on shop-first homes) and Courses (each course opens inside the site, courses/[slug]) (Free Basic), Track (Business), About and Contact | docs/SITES.md, help → "Your own site" |
| Day, Night and emoji packs | lib/theme.ts (Day, Night, Auto by the clock; THEME_SCRIPT in the root layout's head; per device, notesapp:theme), Night colours in app/globals.css (maroon --c-*; sites, Exam Prep, the Life game and print pages pinned to Day with [data-site-theme] / [data-theme-off]), switch in Account settings and both menus (components/theme/). African pattern: drawings in lib/africa-drawings.ts, tile from npx -y tsx scripts/african-pattern.ts → public/images/patterns/africa-{day,night}.svg, used by .na-pattern (chats, empty covers). Emoji packs lib/emoji-packs.ts (:x-…: codes; Noto Emoji and Noto Color Emoji fonts; paid packs checked on send), countries lib/countries.ts, suggestions as you type lib/country-suggest.ts + components/CountrySuggest.tsx. Header ☀/☽/◐ button components/theme/ThemeQuick.tsx. Own chat background on Pro+ lib/chat-background.ts (saved in userPrefs.chatBackground via /api/messages/prefs, plan checked on save and read; pictures upload with purpose chat to chatbg/<uid>/), picker components/messages/ChatBackgroundPicker.tsx | "Day and night…" in /help |
| Frame (Moda redesign) | Phones: one light header and a bottom tab bar (Feed, Explore, Market, Academy, Messages, Profile) for members and on the app address, full-screen conversations and calls; computers: the app header and left menu on the feed pages and the app address (lib/chrome.ts, components/shell/*) | docs/ARCHITECTURE.md "The frame" |
| Promotion & discovery | The journal feed (For you, Following, Latest, Top · 7d) with Most read, Who to follow, Promoted boosts and ads between posts; Explore (/explore) with Market and Academy tabs; Saved (journals, store items, courses, messages kept from chats); Notes Market (/shop) and Notes Academy (/academy) in one order: For you, Most viewed this week, Recent (lib/discovery.ts); profile tabs Notes, Store, Courses; Trending tabs Notes, Store, Courses, Publishers; post/item boosts (cancel any time, half of what's left refunded; strips rotate 3/1 per set every 45 s, Admin → Ads), gifts, self-serve banner ads in a fixed 1200 × 628 frame across 12 spots incl. the weekly digest and Notes Life billboards (lib/ad-config.ts, /advertise/specifications) and ad share, recommendations on profiles and organisations | "Boosts & gifts", "Advertiser campaigns" |
| Plans & badges | Free Standard/Basic, Pro, Business (Paystack plans), Enterprise (custom); prices set by the owner in Admin → Pricing, including the two Enterprise course packages (Enterprise Courses ₦100,000/month, Enterprise Academy API from ₦250,000/month + usage; coursePackages in lib/pricing.ts); maroon ✔, gold ✔ (endorsed; identity-checked is built but Dojah is still on the sandbox) | "Pro / Business plans", "Verified badge", "Dojah webhook" |
| Notes Academy | Free and paid courses (/academy): any publisher teaches free courses with lessons from their own YouTube, played inside #NotesApp, plus text lessons; paid courses on Pro (text, PDFs on private R2, YouTube) and Business/Enterprise (uploaded video on Cloudflare Stream, signed playback, a drifting @username + email watermark), sold through kind: "course" payments at the digital-item fee, paid out 7 days after the sale, two devices per learner, refunds within 7 days if not started; paid lessons only through POST /api/academy/lesson. Up to 4 co-tutors split each sale at their own plan's fee; organisations teach as themselves. Modules, course details, private class/group links, likes, saves, reviews with teacher replies, and certificates (/certificates: ID + QR verification, PNG/PDF, LinkedIn; can be included in a paid course's price) | docs/COURSES.md |
| Naija Exam Prep | JAMB, WAEC and NECO practice at prep.notesapp.name.ng (app/exam-prep, lib/exam-prep.ts rules, lib/exam-prep-server.ts, /api/exam-prep/*): free questions with explanations, server-timed mocks, a pack per exam (₦1,000, 12 months, Paystack, platform revenue, 7-day refund rule), pay links, offline packs with a signed pass (EXAM_PREP_PASS_KEY), progress and a nickname-only weekly board, teen mode with parent confirmation; reviewers by subject invite links (one person or open volunteer links), Admin → Naija Exam Prep; 4,090 starter questions (scripts/exam-prep-starter.mjs): JAMB 70 in each of seven subjects, WAEC and NECO 100 each in 18 subjects (scripts/exam-prep-questions/; WAEC/NECO first batch in ssce/, the second batch for every exam in batch2/, each with its check.mjs) | HANDOVER.md items 41–42, 51, 56, 61, docs/YOUNG_MEMBERS.md, help articles "Naija Exam Prep" |
| Kiswahili | Journals and voice notes in Kiswahili with NKENNEAi (lib/nkenne.ts, lib/kiswahili-server.ts), Admin → Kiswahili (NKENNEAi); public repo AceBoss1/notesapp-swahili | help article "Journals and voice notes in Kiswahili" |
| Enterprise | Server-to-server API (/api/v1), Console, signed webhooks, /docs, own domain (subdomain or root); own domain for Business and Enterprise (the site itself is on every plan from Free Basic; see Sites above) | "API, Console, Docs and custom domains" |
| App address | app.notesapp.name.ng: welcome screen with sign-up and sign-in, a Download button that knows the device, then the journal feed | middleware.ts |
| Trust & ops | /security, /status (+ incidents, response times, email subscribers, calls and their relay, Claude), /changelog, account export/deletion, error monitoring, traction snapshot (stored hourly), admin by custom claims and departments | "Where to look when something's wrong" below |
| Messaging | Direct messages and group chats (up to 50, admin moderation), voice notes, stickers, emoji, bold/italic/underline, replies, pin 3 messages and 3 chats, typing indicator, edit/delete with reader consent once read, link previews, moments, block/report, device and email notifications | Flags NEXT_PUBLIC_MESSAGES_LIVE, NEXT_PUBLIC_MOMENTS_LIVE |
| Calls | Free 1:1 voice and video calls between people who follow each other (WebRTC), a safety code from both DTLS fingerprints (lib/calls.ts), screen sharing on computers (with a data-channel flag so the other side shows the whole screen), group calls in group chats (mesh: up to 6 voice / 4 video; lib/group-calls.ts, lib/group-calls-server.ts, groupCalls/{id}/links), call back from the call line, drag/swap self view, front/back camera, ringing on the installed app even when closed; relay through Cloudflare TURN or our own TURN | lib/calls-server.ts, flag NEXT_PUBLIC_CALLS_LIVE |
| Followers and presence | Followers and Following lists on every profile, online now and last seen (only for people who follow you), two privacy switches | /help → "Followers, following and online status" |
| Nana AI and help centre | Chat on every page, pinned in /messages, /nana, /help articles (built-in + staff, Admin → Help & Nana), writing help in drafts, sharing and messages, member-connected Anthropic key, Ask Nana in the team hub, help-centre-only answers when the AI is off; gems Pearl/Emerald/Ruby by plan (lib/nana-gems.ts), a weekly free allowance and Nana credit (lib/nana-meter.ts), the shared answer bank (lib/nana-bank.ts), topic/subtopic/category suggestions from a title, chat Summarise and Translate | "Nana AI and the help centre" |
| MCP server (phase 1) | mcp.notesapp.name.ng (/api/mcp): read-only tools for AI assistants to find creators, journals, Market items and courses, open session times and booking links; with an API key, the member's own profile, posts, bookings, orders and earnings; every call logged | lib/mcp/*, /docs |
| Notes Life | A free life game at life.notesapp.name.ng (and /life) played with the NotesApp account: needs, jobs and shifts, food (Chef Adams delivery, takeaway, dine-in, cooking), a fridge and microwave, NEPA blackouts with Power GO / generators / solar, Abuja (Lagos coming), partners Chef Adams, itel Energy, Candellux Imperial (suites with an 11 AM checkout, room service, the pool, swimming lessons, the VIP bar with a 360° view, gym) and Digital Witch (courses, certificates for tech jobs, Cynthia Okeh as #1 and her Saturday giveaway), Paylony CardTap (every N$ payment at a counter is a tap of the player's CardTap card; lib/life/cardtap.ts), partner outlets players can own, residents 🤖 and real players at the same place, chat with friends, invites (₦250 each), Billionaires List, sound. Game money (Notesville Naira) bought with the wallet or a card, never cashed out; two more Wuse streets (Wuse Market Zone 4, Aminu Kano Crescent Wuse II) with errands, and Emerald Ezurukam (#1, the convoy gift at the bus stand); restrooms away from home (hotel, partners, Wuse Market mobile WC); LUXNAS (partner: academy, jobs, studio) | README "Notes Life" section, /help → "How Notes Life works", /life/partners, flag NEXT_PUBLIC_LIFE_LIVE |
| Social publishing | Publish a post to a connected LinkedIn or X account (LINKEDIN_*, X_* variables) | "Publish to LinkedIn and X" in /changelog |
| Team hub (internal) | Work board (views by person, departments, due dates), milestones, daily/weekly summaries, meetings with Granola (each member connects their own account), money ledger, Grants & subscriptions, Expenses due, payment assignee and deadlines, time tracker and weekly timesheets (check-ins, attendance, leave, billable projects, team leads who approve), payroll by the hour, staff library with "I have read this" and who has read it, team message hub, legal team access, Admin → Pricing, the AI agent-layer backlog (15 items with owners and due dates). In internal testing; it will be a paid add-on for Business and Enterprise once testing is done (/teams) | "Money ledger", lib/admin-access.ts |
| Public site | Home and About with the owner's description, Trusted by and Partners marquees (lib/partners.ts), With thanks (programmes that back us), /pricing (plans, course pricing, the Enterprise course packages, the paid add-ons to come), /teams, /roadmap, /domains, the #1MillionNairaNotesAppChallenge; the standard description lives in lib/site.ts | lib/partners.ts, lib/site.ts |
| Company | NOTESAPP TECHNOLOGIES LTD (RC and TIN in lib/site.ts; SMEDAN number pending) | "Company identity" |