Skip to content

Instantly share code, notes, and snippets.

View johannschopplich's full-sized avatar

Johann Schopplich johannschopplich

View GitHub Profile
@johannschopplich
johannschopplich / index.ts
Created January 3, 2025 06:57
TypeScript Cheat Sheet
// 📜 TypeScript Cheat Sheet: Types and Their Usage
// 🛠️ **Primitive Type**
// Used mostly for documentation.
type SanitizedInput = string; // Example primitive type.
type MissingNo = 404; // Custom primitive type.
// 🏠 **Object Literal Type**
type Location = {
x: number;
@johannschopplich
johannschopplich / cache_expiration.conf
Created November 23, 2024 21:20
Ploi.io nginx Configuration Extensions for Kirby CMS
# ----------------------------------------------------------------------
# | Cache expiration |
# ----------------------------------------------------------------------
# Serve resources with a far-future expiration date.
#
# (!) If you don't control versioning with filename-based cache busting, you
# should consider lowering the cache times to something like one week.
#
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
@johannschopplich
johannschopplich / prompts.ts
Last active November 23, 2024 21:48
bolt.new System Prompt
// https://github.com/stackblitz/bolt.new/blob/main/app/lib/.server/llm/prompts.ts
import { MODIFICATIONS_TAG_NAME, WORK_DIR } from '~/utils/constants';
import { allowedHTMLElements } from '~/utils/markdown';
import { stripIndents } from '~/utils/stripIndent';
export const getSystemPrompt = (cwd: string = WORK_DIR) => `
You are Bolt, an expert AI assistant and exceptional senior software developer with vast knowledge across multiple programming languages, frameworks, and best practices.
<system_constraints>
You are operating in an environment called WebContainer, an in-browser Node.js runtime that emulates a Linux system to some degree. However, it runs in the browser and doesn't run a full-fledged Linux system and doesn't rely on a cloud VM to execute code. All code is executed in the browser. It does come with a shell that emulates zsh. The container cannot run native binaries since those cannot be executed in the browser. That means it can only execute code that is native to a browser including JS, Web
@johannschopplich
johannschopplich / proxy.ts
Created August 30, 2024 08:19
unenv `createMock`, but optimized
const fn = function () {}
function createMock(name: string, overrides: Record<any, any> = {}): any {
fn.prototype.name = name
const props: Record<any, any> = {}
return new Proxy(fn, {
get(_target, prop) {
if (prop === 'caller') {
return null
}
@johannschopplich
johannschopplich / polyfill.ts
Created June 24, 2024 08:22
Polyfill for `Promise.witResolvers()` in TypeScript
Promise.withResolvers ??= function <T>() {
let resolve: PromiseWithResolvers<T>["resolve"];
let reject: PromiseWithResolvers<T>["reject"];
const promise = new Promise<T>((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve: resolve!, reject: reject! };
};
@johannschopplich
johannschopplich / backup-env.mjs
Created April 24, 2024 07:53
Backup all your .env files while keeping the directory structure of the source directory
import process from "node:process";
import fsp from "node:fs/promises";
import path from "node:path";
import fg from "fast-glob";
async function copyEnvFiles(sourceDir, backupDir) {
try {
const envFiles = await fg(["**/.env"], {
cwd: sourceDir,
ignore: ["**/node_modules/**"],
@johannschopplich
johannschopplich / blueprint.yaml
Created April 19, 2024 05:43 — forked from lukaskleinschmidt/blueprint.yaml
Kirby 4 query pages from a searchengine for the pages field
fields:
articles:
type: pages
query: kirby.collection('articles')
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Patrick Marsceill, software designer</title>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/favicon-32x32.png"
@johannschopplich
johannschopplich / storage.ts
Created October 30, 2023 11:05
Capacitor Preferences binding for VueUse `useStorageAsync`
import { Preferences } from "@capacitor/preferences";
import type {
MaybeRefOrGetter,
RemovableRef,
StorageLikeAsync,
UseStorageAsyncOptions,
} from "@vueuse/core";
const capacitorPreferenceStorage: StorageLikeAsync = {
async getItem(key: string): Promise<string | null> {
@johannschopplich
johannschopplich / main.js
Created September 5, 2023 07:20
Check which tables are available for Seven SwansSEVEN SWANS restaurant in Frankfurt am Main
// Function to fetch reservation data from API
async function fetchReservationData(date, capacity = 2, agentId = 2) {
const baseUrl =
'https://9110-api.quandoo.com/merchants/56296/reservation-options'
const url = `${baseUrl}?date=${date}&capacity=${capacity}&agentId=${agentId}`
try {
const response = await fetch(url)
const data = await response.json()