') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); dcimring (Daniel) · GitHub
Skip to content
View dcimring's full-sized avatar

Highlights

  • Pro

Block or report dcimring

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
dcimring/README.md

Hi, I'm Daniel

I'm a founder based in the Cayman Islands. Before this I built and ran a mobile social network in South Africa for ten years and made it profitable, back before Facebook and Instagram took that market.

Now I build AI products full time. I'm technically literate but I don't hand-write code — I read it, argue about architecture and direct the work, and AI does the implementation. Mostly React and Next.js on the front, Convex or Supabase behind it, and Python for scraping and agent workflows.

Two things have my attention right now. Both live in private repos, so there isn't much to click on here — this is the short version of what they do.


GazettePulse — compliance tooling for regulated companies in Cayman

It starts with data that's public but hard to use: the CIMA and DITC regulations, kept current, and the government gazette that comes out every two weeks. Both go into a free library anyone can search. The paid parts sit on top — watchlists that alert you when a company or person you're tracking shows up in the gazette, and an audit tool that reads your policy documents and tells you where they fall short of what CIMA actually asks for.

The reason it exists: today the only real option for staying compliant is an expensive consultant, and most small regulated firms here can't justify that.

Pre-launch, building the data layer → gazettepulse.com


Schooner — a job assistant for the Caribbean that lives in a chat app

I collect the Cayman job market from more than 35 sources twice a day — the government work permit portal, the recruitment agencies, and company career pages one employer at a time — which together is a more complete picture of who's hiring than anyone else has. A pipeline of agents scores every posting against your profile, including whether your immigration status gives you a real shot at it, which matters more here than most places. For the strong matches it drafts a CV and a cover letter.

You talk to it like a person; a voice note is enough to set up a profile. And nothing gets sent anywhere until you say yes — a human approves every application, on purpose.

The bigger idea is a labour rail for the region. The Caribbean loses its own people to other countries and imports workers at the same time, largely because someone on one island can't see the job one island over. The same pipeline copies across, one island at a time — which one is next isn't decided yet. And the data it produces is worth something on its own: governments here steer labour policy on studies done every few years, when this is a live picture of who's hiring, for what, at what pay.

Running in Cayman with pilot users, and my entry to the Future Caribbean buildathon → caribbean.work


How I work

Solo and bootstrapped, no investors and no plans to hire. That shapes every decision — if something needs a team to maintain it, it's the wrong answer.

A few things I hold to. Talk to customers before building, because assuming is the expensive mistake. Keep the interface self-evident; if it needs instructions, the design failed. Write like a human, no jargon anywhere a user can see it. And keep it simple, because complexity is a cost, not a feature.


The public repos here are side projects — a market breadth dashboard for swing trading, a pickleball ratings scraper, and the leaderboard and scoring site I built for the Pickleball Cayman corporate league.

Popular repositories Loading

  1. crypto-price-analysis crypto-price-analysisPublic

    Jupyter notebooks that analyse crypto price data

    Jupyter Notebook 35 23

  2. cryptobot cryptobotPublic

    Python bot for making crypto trades on Bitmex

    Python 5 3

  3. stockbee-dashboard stockbee-dashboardPublic

    Market breadth dashboard and stock screener implementing Stockbee's (Pradeep Bonde) swing-trading method — Market Monitor breadth indicators, momentum burst / anticipation / episodic pivot scans, b…

    Python 4 1

  4. cryptobee-dashboard cryptobee-dashboardPublic

    Python 1 1

  5. edgar-scraper edgar-scraperPublic

    HTML

  6. gemini-30-days gemini-30-daysPublic

    HTML