Skip to content

Instantly share code, notes, and snippets.

View dtothefp's full-sized avatar

David Fox-Powell dtothefp

  • Flexport
  • United States
View GitHub Profile
@dtothefp
dtothefp / psychedelic-safari-mvp.md
Created April 16, 2026 16:42
Psychedelic Safari MVP concept diagram (2026-04-16): 5-product lineup + Vortex + 8 May launch

Psychedelic Safari — MVP Concept Diagram

Updated 2026-04-16. Covers the five-product lineup, the new Vortex premium tier (Oct–Jan), the two 8 May 2026 launch events (Panorama → Kirstenbosch Signature Tour + Digital Nomad Beat-the-Traffic Package), the MAPS screening gate, Peach/Yoco payments, Panorama/Kesh/David revenue split, and distribution surfaces.

flowchart LR
  subgraph Customer["Customer journey"]
    direction TB
    V["Visitor lands on<br/>psychedelicsafari.guide"] --> MAPS{MAPS screening<br/>gate}
    MAPS -->|Pass| Book[Booking UI]
@dtothefp
dtothefp / anthropic-prompts.md
Last active April 8, 2026 22:10
Beeks.ai AI Data Flow Diagrams & Anthropic Prompts

Anthropic Prompts Reference

All prompts used in the Beeks.ai AI pipelines. Each section includes the system prompt, user message template, model configuration, and expected response schema.


Table of Contents

  1. Beeks Index Pipeline Prompts
@dtothefp
dtothefp / PRIORITIZATION_MEETING_2026-02-18.md
Last active February 18, 2026 14:31
Prediction Markets — Prioritization Meeting (Feb 18, 2026)

Prioritization Meeting — Feb 18, 2026

The product's core value prop (aggregated market data) has zero real data flowing to the UI. We need to align on data sources before we can prioritize tickets — most are blocked until we decide where the data comes from.

The Data Source Problem

We have two reference projects pulling in opposite directions, and most Linear tickets don't specify their data source. Until we decide, those tickets are blocked.

smart-bet-whisper — API-driven (original Lovable MVP)

ERROR in /Users/davidfox-powell/dev/good-rx/content-web-frontend/src/constants/constants.test.ts(1827,13):
TS2322: Type '{ title: null; displayTitle: any; subtitle: any; content: { title: string; displayTitle: string; url: any; subtitle: any; image: { title: string; url: string; height: number; width: number; __typename: "Asset"; }; ... 4 more ...; __typename: "Link"; }; image: any; sys: { ...; }; __typename: "PageHeroSimple"; }' is not assignable to type 'ContentfulPageMeta_pageContainerCollection_items_heroCollection_items'.
Type '{ title: null; displayTitle: any; subtitle: any; content: { title: string; displayTitle: string; url: any; subtitle: any; image: { title: string; url: string; height: number; width: number; __typename: "Asset"; }; ... 4 more ...; __typename: "Link"; }; image: any; sys: { ...; }; __typename: "PageHeroSimple"; }' is not assignable to type 'ContentfulPageMeta_pageContainerCollection_items_heroCollection_items_PageHeroSimple'.
Types of property 'content' are incompatible.
(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installedModules[moduleId].exports}var module=installedModules[moduleId]={i:moduleId,l:false,exports:{}};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.l=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.d=function(exports,name,getter){if(!__webpack_require__.o(exports,name)){Object.defineProperty(exports,name,{enumerable:true,get:getter})}};__webpack_require__.r=function(exports){if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(exports,"__esModule",{value:true})};__webpack_require__.t=function(value,mode){if(mode&1)value=__webpack_require__(value);if(mode&8)return value;if(mode&4&&typeof value==="object"&&value&&value.__esModule)return value;var ns=Object.create(null);__webpack_require__.r(ns);O
import _regeneratorRuntime from "@babel/runtime-corejs2/regenerator";
import _asyncToGenerator from "@babel/runtime-corejs2/helpers/esm/asyncToGenerator";
import _Promise from "@babel/runtime-corejs2/core-js/promise";
var wait = function wait() {
var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;
return new _Promise(function (res) {
return setTimeout(res, duration);
});
};
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
var wait = function wait() {
var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;
return new Promise(function (res) {
return setTimeout(res, duration);
});
};
export default
@dtothefp
dtothefp / wait-compiled-no-runtime.js
Created April 20, 2019 16:03
Simple Async Timer Compiled
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var wait = function wait() {
var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;
return new Promise(function (res) {
return setTimeout(res, duration);
});
};
@dtothefp
dtothefp / wait.js
Last active April 20, 2019 16:07
Simple Async Timer
const wait = (duration = 100) => new Promise((res) => setTimeout(res, duration));
export default async (duration = 500) => {
console.log('Wait for: ', durtaion);
await wait(duration);
console.log('Finished after: ', durtaion);
};
/* eslint-disable */
const { intersection } = require(`lodash`);
const { createClient } = require(`contentful`);
const {
createClient: cmaCreateClient,
} = require(`contentful-management`);
(async () => {
const SPACE_ID = `q5lwz1whkyct`;
const {