Nicholas Mboya

340 posts

Nicholas Mboya banner
Nicholas Mboya

Nicholas Mboya

@niccomboya

MLE, SWE, Entrepreneur, Venture Capitalist

San Francisco, CA Katılım Aralık 2025
12 Takip Edilen6 Takipçiler
Sabitlenmiş Tweet
Nicholas Mboya
Nicholas Mboya@niccomboya·
I’m launching a Reddit + Off-Page SEO growth service for early-stage SaaS & Agent-as-a-Service teams. What I do (done-for-you): Combine effective off-page SEO with Reddit marketing (earned mentions + reputation) Identify where Reddit can win on Google: search intent, existing SERP competition, and content gaps Build community-first Reddit distribution: post angles that fit each subreddit + a comment strategy that drives trust Use minimum, high-intent linking (focus on strong mentions and only link when it’s genuinely useful) What you get (7-day starter): Target keyword list + competition/opportunity analysis + current SERP situation 10–15 post prompts tailored to your product + the intent behind each 5 “comment scripts” to start conversations without sounding promotional A short weekly report: what we learned + what to do next If you’re building in the US and want a practical Reddit + SEO plan, DM me “REDDIT” and I’ll send a quick audit: 5 keywords + 3 Reddit angles for your ICP. (Taking a small number of teams while I refine the playbook and go deep.)
English
2
0
4
149
Nicholas Mboya retweetledi
God of Prompt
God of Prompt@godofprompt·
Left: the watermark GPT Image 2 embeds into every image it generates. Right: SynthID, the fingerprint Google bakes into every Nano Banana and Gemini image. Invisible to the human eye. Applied during generation, not added after. Designed to survive screenshots, crops, and compression. Most people using these tools daily have no idea their output is fingerprinted at the pixel level. Every major AI image generator now tags what it produces, and the tag travels with the image wherever it ends up. You can verify this yourself. Content Credentials Verify detects C2PA markers from OpenAI images. Gemini detects SynthID if you upload an image directly to it. The images will keep getting more realistic. The identification tech is keeping pace.
God of Prompt tweet mediaGod of Prompt tweet media
Pleometric@pleometric

I extracted the gpt-image-2 watermark! testing it on different types of images now

English
140
545
4.9K
897.6K
Nicholas Mboya retweetledi
Jack Altman
Jack Altman@jaltma·
There’s a lot of alpha in putting your ego aside by being willing to be cringe, willing to fail in public, willing to ask for what you want and face rejection, etc.
English
198
609
5.3K
600.4K
Nicholas Mboya retweetledi
@levelsio
@levelsio@levelsio·
🏆 For the first time in a decade on @Stripe I've started winning disputes with my vibe coded dispute responder I used to ignore disputes so I almost always lost them, now I've started winning, this one is the first big dispute for $1,199 USD! Whenever a dispute comes in, my site gets a webhook notice from Stripe, it then starts collecting evidence and generates a PDF with entire user's details, when they signed up, and most importantly what they did in the app In this case the user used the app for months, generated thousands of photos then tried to get the money back from their bank The evidence has to be REALLY detailed, and REALLY good, which is why it's perfect to vibe code it, you can get quite detailed with different types of users and activity on your app, and put that all in the PDF I'm shocked because I again I never would win disputes before People in US especially abuse the [ chargeback ] or [ dispute ] en masse, unlike the rest of the world, it's easily built into their banking app next to every transaction, so it's one tap to get free stuff. And why not? You get free stuff! It's destructive for business owners like me on many levels, if I get over 1% disputes on my account, I risk getting shutdown permanently by Stripe, Visa and MasterCard, like permanently for life, not just my business but on my personal name too, it's ruthless Disputes are also super expensive for business owners: you don't just pay back the amount they disputed, for every dispute you pay $30, which you only get back if you win! But with AI we can now create our own tools to fight back against dispute abuse and finally win! 🎉
@levelsio tweet media
@levelsio@levelsio

✅ Done 💳 Made an auto-dispute response system for Interior AI to see how easy it'd be It syncs old disputes but also catches new disputes via Stripe webhook and then auto submits evidence to try win them, it even includes the interior designs they generated in the evidence PDF to prove they used it! Here's the prompt/skill I made: ---- Build an auto-dispute-response system for Stripe that: 1. Shared evidence collection (app/dispute_evidence.php) Create a shared file with functions used by both the webhook and sync worker. This avoids duplicating evidence logic. Key functions: - getDisputeUserPlan($user, $stripe) — pulls the user's subscription plan from Stripe API (source of truth, since local DB plan field gets cleared on cancellation). Falls back to local DB fields if Stripe call fails. Maps product IDs to plan names and includes price/interval and canceled status. - collectDisputeEvidence($stripe, $user, $email, $charge, $photosDb) — collects all text and file evidence, returns an array ready to submit to Stripe. - generateServiceDocPdf($stripe, $user, $email, $photos_done, $recent_photos, $total_amount_paid) — generates a PDF with customer info, usage summary, recent activity table, and up to 6 actual product images (resized to JPEG at 500px wide / quality 75 to stay under Stripe's 5MB file upload limit). Returns both the Stripe file ID and raw PDF data. Important: pull total_amount_paid from Stripe charges API (sum of succeeded, non-refunded charges) instead of trusting the local DB which can be null/stale. 2. Webhook handler (in stripe_webhook.php) Catch `charge.dispute.created` events. When a dispute comes in: - Get the dispute, charge, and customer objects from Stripe - Look up the user in the local database by stripe_customer_id - Save the dispute to a `disputes` SQLite database (fields: dispute_id, charge_id, payment_intent_id, stripe_customer_id, user_id, email, amount, currency, reason, status, epoch_created, epoch_evidence_submitted, evidence_json, stripe_response, epoch_resolved, outcome) - Call collectDisputeEvidence() to collect all evidence (text + file uploads) - Submit evidence to Stripe via $stripe->disputes->update($dispute_id, ['evidence' => $evidence]) - Send a Telegram notification that a new dispute came in and evidence was auto-submitted Also catch `charge.dispute.updated` and `charge.dispute.closed` events to track dispute outcomes (won/lost) in the database and send Telegram notifications with the result (with emoji: checkmark for won, x for lost, warning for other). 3. Evidence fields submitted to Stripe TEXT fields (write strings directly): - product_description — describe what the product/service is - customer_name — from Stripe customer object - customer_email_address — from Stripe customer object - access_activity_log — detailed usage log: signup date, number of items/actions done, last active date, subscription plan (from Stripe), platform, total amount paid (from Stripe), recent activity with timestamps - uncategorized_text — the "why we should win" argument: customer signed up on X, actively used the service doing Y things, total amount paid, service was delivered digitally/instantly, customer never contacted us for a refund before disputing - refund_policy_disclosure — when the refund policy was presented (during checkout, always accessible at /legal) - cancellation_policy_disclosure — when cancellation policy was shown (during checkout, accessible at /legal, can cancel anytime from dashboard) - refund_refusal_explanation — customer didn't contact us for a refund before filing the dispute - cancellation_rebuttal — proof customer actively used the service and never requested cancellation - service_date — date of the charge (Y-m-d format) FILE UPLOAD fields (upload file to Stripe first via $stripe->files->create(['purpose'=>'dispute_evidence', 'file'=>fopen($path,'r')]), then pass the returned file_xxxxx ID): - receipt — pull the invoice PDF directly from Stripe ($stripe->invoices->retrieve($charge->invoice)->invoice_pdf gives a ready-made PDF URL, just download it and upload as dispute evidence) - service_documentation — generate a PDF containing: customer info section, service usage summary, recent activity table, and up to 6 actual product images/screenshots the customer received. Resize images before embedding (500px wide, JPEG quality 75) to stay under Stripe's 5MB file upload limit. Also save both PDFs to your file storage (e.g. Cloudflare R2, S3) with hashed filenames so they're not guessable but viewable from the admin dashboard. Store the storage URLs in the evidence_json as _receipt_r2_url and _service_doc_r2_url (underscore prefix so they're easy to identify as internal fields). DO NOT use these fields for text — they expect file upload IDs only: service_documentation, cancellation_policy, refund_policy, customer_communication, customer_signature, receipt, shipping_documentation, duplicate_charge_documentation, uncategorized_file 4. CLI sync worker (workers/syncDisputes.php) A script that pulls ALL existing disputes from Stripe's API (paginated with $stripe->disputes->all(['limit' => 100]) and starting_after for pagination), saves them to the local disputes database, and for any that still have needs_response or warning_needs_response status and haven't had evidence submitted yet — auto-submits evidence using the shared collectDisputeEvidence() function. This is needed because the webhook only catches future disputes, not existing ones. Too heavy to run on frontend — run via CLI only (php workers/syncDisputes.php). Saves a JSON cache file with sync results so the dashboard can show last sync time. 5. Mini dashboard (disputes.php with ?key= auth) A simple HTML page protected by ?key= query parameter that shows: - Stats boxes: total disputes, pending, won, lost, disputed last 30 days (amount + count), disputed last 12 months (amount + count), total $ disputed - A note showing the CLI sync command and last sync time from cache - A test form where you enter a stripe_customer_id to preview what evidence would be submitted (without actually submitting) — useful for debugging - A table of all disputes: date, email, amount, reason, status (color-coded badges), evidence submission status, links to both detail view and Stripe dashboard Detail view (action=view&id=dispute_id): - Shows all dispute info, link to Stripe, and a "Regenerate Evidence" button - Shows PDF file links (receipt + service documentation) if available - Shows Stripe file upload IDs - Shows all text evidence fields Regenerate Evidence (action=regen&id=dispute_id): - Regenerates the receipt and service documentation PDFs and uploads to file storage - Updates the evidence_json in the database with new PDF URLs - IMPORTANT: Use fastcgi_finish_request() to send the HTTP response immediately (redirect back to detail page with "regenerating in background" notice), then continue generating PDFs in the background. This prevents frontend timeouts since downloading images and generating PDFs can take 30+ seconds. Add an nginx rewrite for the page (e.g. rewrite ^/disputes/?$ /disputes.php). Make sure it's in the correct nginx config file (check which one the symlink in sites-enabled actually points to). 6. Telegram notifications - New dispute: "{site name} - New dispute from {email} for ${amount} ({reason}). Evidence auto-submitted to Stripe. {stripe_dashboard_link}" - Evidence failed: "{site name} - New dispute from {email} for ${amount} ({reason}). Evidence submission FAILED: {error}" - Dispute won: "{site name} - Dispute WON (checkmark) for {email} - ${amount} ({reason}) {stripe_dashboard_link}" - Dispute lost: "{site name} - Dispute LOST (x) for {email} - ${amount} ({reason}) {stripe_dashboard_link}" - DB permission error: "{site name} - DISPUTE DB ERROR: {error} - check permissions on data/disputes.db" 7. Make sure these Stripe webhook events are enabled in the Stripe dashboard: - charge.dispute.created - charge.dispute.updated - charge.dispute.closed 8. Database permissions The disputes.db file must be writable by the web server user (e.g. www-data). If you create it from CLI as root, fix ownership to match your other DB files. PHP-FPM runs as a different user than root. 9. Dependencies - FPDF (setasign/fpdf) for PDF generation — install via composer require setasign/fpdf - GD extension for image resizing (usually already installed) - Stripe PHP SDK (already installed if you have Stripe webhooks) - AWS S3 SDK for R2/S3 uploads (already installed if using Cloudflare R2)

English
113
202
6.2K
931.8K
Eliana
Eliana@eliana_jordan·
ok that was fast… my app got approved in 8 hours first try! thought it was a myth, turns out it’s real
Eliana tweet media
English
99
1
311
20.3K
Nicholas Mboya retweetledi
0xMetaLabs
0xMetaLabs@0xMetaLabs·
@conorsen Hitting a rate limit isn’t a compute ceiling; it’s a product throttle. Labs ration usage long before they hit actual capacity. The constraint isn’t raw compute; it’s cost, pricing, and reliability at scale.
English
0
1
1
1.1K
Nicholas Mboya retweetledi
Y Combinator
Y Combinator@ycombinator·
AI has stopped being a feature and started being the foundation. We're excited about a new wave of startups rebuilding software, services, and silicon— and pushing AI into the physical world. ycombinator.com/rfs
Y Combinator tweet media
English
209
958
8.9K
4.4M
Nicholas Mboya retweetledi
Varnika
Varnika@Varnika99·
There are only two types of developers: A.Those who test their code… and B.those who test directly in production.
English
18
2
30
953
Nicholas Mboya retweetledi
OpenAI
OpenAI@OpenAI·
Introducing GPT-5.5 A new class of intelligence for real work and powering agents, built to understand complex goals, use tools, check its work, and carry more tasks through to completion. It marks a new way of getting computer work done. Now available in ChatGPT and Codex.
English
2.5K
7K
51.8K
13M
Nicholas Mboya retweetledi
Sam Altman
Sam Altman@sama·
Codex hit 4M active users, less than two weeks after hitting 3M. We will reset rate limits today!
English
1.5K
1K
24.7K
1.5M
Nicholas Mboya retweetledi
cat
cat@_catwu·
Opus 4.7 is live in Claude Code today! The model performs best if you treat it like an engineer you're delegating to, not a pair programmer you're guiding line by line. Here are three workflow shifts we recommend for this model 🧵 anthropic.com/news/claude-op…
English
48
81
1K
83.3K
Nicholas Mboya retweetledi
Greg Brockman
Greg Brockman@gdb·
The world is transitioning to a compute-powered economy. The field of software engineering is currently undergoing a renaissance, with AI having dramatically sped up software engineering even over just the past six months. AI is now on track to bring this same transformation to every other kind of work that people do with a computer. Using a computer has always been about contorting yourself to the machine. You take a goal and break it down into smaller goals. You translate intent into instructions. We are moving into a world where you no longer have to micromanage the computer. More and more, it adapts to what you want. Rather doing work with a computer, the computer does work for you. The rate, scale, and sophistication of problem solving it will do for you will be bound by the amount of compute you have access to. Friction is starting to disappear. You can try ideas faster. You can build things you would not have attempted before. Small teams can do what used to require much larger ones, and larger ones may be capable of unprecedented feats. More and more, people can turn intent into software, spreadsheets, presentations, workflows, science, and companies. People are spending less energy managing the tool and more energy focusing on what they are actually trying to create. That shift brings a kind of joy back into work that many people haven’t felt in a long time. Everyone can just build things with these tools. This is disruptive. Institutions will change, and the paths and jobs that people assumed were stable may not hold. We don’t know exactly how it will play out and we need to take mitigating downsides very seriously, as well as figuring out how to support each other as a society and world through this time. But there is something very freeing about this moment. For the first time, far more people can become who they want to become, with fewer barriers between an idea and a reality. OpenAI’s mission implies making sure that, as the tools do more, humans are the ones who set their intent and that the benefits are broadly distributed, rather than empowering just one or a small set of people. We're already seeing this in practice with ChatGPT and Codex. Nearly a billion people are using these systems every week in their personal and work lives. Token usage is growing quickly on many use-cases, as the surface of ways people are getting value from these models keeps expanding. Ten years ago, when we started OpenAI, we thought this moment might be possible. It’s happening on the earlier side, and happening in a much more interesting and empowering way for everyone than we’d anticipated (for example, we are seeing an emerging wave of entrepreneurship that we hadn’t previously been anticipating). And at the same time, we are still so early, and there is so much for everyone to define about how these systems get deployed and used in the world. The next phase will be defined by systems that can do more — reason better, use tools better, plan over longer horizons, and take more useful actions on your behalf. And there are horizons beyond, as AI starts to accelerate science and technology development, which have the potential to truly lift up quality of life for everyone. All of this is starting to happen, in small ways and large, today, and everyone can participate. I feel this shift in my own work every day, and see a roadmap to much more useful and beneficial systems. These systems can truly benefit all of humanity.
English
413
664
5.2K
594.3K
Nicholas Mboya retweetledi
Tyler
Tyler@rezoundous·
Dear OpenAI, I am hitting the 5h session limit within 10 minutes on my Codex Plus plan. You have made it completely unusable overnight. Please fix it. Thanks.
English
287
150
2.6K
208.8K
Nicholas Mboya retweetledi
Sam Altman
Sam Altman@sama·
I wrote this early this morning and I wasn't sure if I would actually publish it, but here it is: blog.samaltman.com/2279512
English
2.8K
1.2K
15.9K
7M
Nicholas Mboya retweetledi
Tibo
Tibo@tibo_maker·
more founders are choosing bootstrapping over VC - liquidity events now take 14 years on average. up from 7. that's your entire 30s waiting for an exit that might never come. - bootstrapped startups are 3x more likely to be profitable within 3 years. VC-backed companies optimize for growth metrics, not money in the bank - preferred shares mean founders often walk away with nothing. even when the company "succeeds," VCs get paid first. sometimes that's all there is - bootstrapped companies spend 1/4 of what VC-backed startups spend on customer acquisition and grow just as fast. capital efficiency wins - VCs can force a sale whenever it suits them. drag-along clauses give them that power. you built it, they decide when to sell it - fundraising takes 4-5 months of full-time work. that's 4-5 months not building your product or talking to customers. most founders who reach traction don't need VCs anymore by then - AI tools let solo founders build what used to require a 10-person team. the capital requirement that made VC necessary is disappearing - 38% of startups now launch without external funding. up from 26% in 2019. the shift is already happening - most VCs are not operators. they can pressure you to grow but can't help you build. the "value add" is often just intros to other portfolio companies - VC money outside of AI has dried up. if you're not building AI, you're fighting for scraps anyway - a $10M business you own 80% of beats a $100M valuation where VCs control the outcome. math is math - the ZIRP era is over. cheap money inflated VC activity for a decade. that's not coming back - founders are getting ousted by their own boards. the company you built becomes a job you can be fired from - VC turns you into a middle manager of your own company. board meetings, investor updates, formal reporting. you didn't quit your job to get another boss - the pressure to hit arbitrary growth targets breaks people. chasing 3x year over year because your investors need it, not because your business needs it - you stop building what customers want and start building what looks good in a pitch deck. that's how products die - VCs funded hundreds of AI startups in the last few years. most are already dead or irrelevant. the foundation model companies just absorbed their use cases - when funding dries up, VC-backed companies panic. bootstrapped companies just keep going. you're already used to operating lean. you started a company for freedom. VC often takes that away if the business feeds your life and you control it, why give that up?
English
89
27
325
30.1K
Nicholas Mboya retweetledi
Oliver Henry
Oliver Henry@oliverhenry·
Remember when people used to pay thousands to get websites made for them?
English
39
4
76
10.9K
Nicholas Mboya retweetledi
How To AI
How To AI@HowToAI_·
🚨 BREAKING: NVIDIA just removed the biggest friction point in Voice AI They open-sourced PersonaPlex 7B, a real-time conversational model. It listens and speaks simultaneously to handle natural interruptions and overlaps. 100% Open Source.
English
157
671
6.1K
697.8K
Nicholas Mboya retweetledi
Afif | Programmer dad 🇲🇾🤲🏻🇵🇸
Remember Internet Download Manager? Till today I wonder if it really made downloads faster or it just had better animations to make us feel like the downloads were faster.
English
318
260
4.1K
682.8K
Nicholas Mboya retweetledi
Eliana
Eliana@eliana_jordan·
congrats on your failed apps, most people don’t even try
Eliana tweet media
English
371
201
3.3K
51.6K