Skip to content

Instantly share code, notes, and snippets.

@akoepcke
akoepcke / readDuration.php
Created May 7, 2021 19:07 — forked from owenvoke/readDuration.php
A string macro for the duration to read text.
<?php
// From Marcel Pociot's tweet
// See: https://twitter.com/marcelpociot/status/1389881758267625473
Str::macro('readDuration', function (... $text) {
$totalWords = str_word_count(implode(' ', $text));
$minutesToRead = round($totalWords / 200);
return (int) max(1, $minutesToRead);
@akoepcke
akoepcke / gist:0a07c557493214b7e1e9ff2b62a13e09
Created May 11, 2021 10:57 — forked from MrDys/gist:3512455
Link directly to an open modal window in Bootstrap
/* If you've ever had the need to link directly to an open modal window with Bootstrap, here's a quick and easy way to do it:
Make sure your modal has an id:
<div class="modal" id="myModal" ... >
Then stick this bit of Javascript at at the end of your document:
*/
$(document).ready(function() {
@akoepcke
akoepcke / placeholder-image.js
Created March 1, 2023 09:44 — forked from stowball/placeholder-image.js
Placeholder React Components
function PlaceholderImage({
height,
width,
...consumerProps
}) {
return (
<img
{...consumerProps}
alt=""
src={`https://via.placeholder.com/${width}x${height}`}
@akoepcke
akoepcke / next.config.js
Created April 23, 2023 13:31 — forked from mdubourg001/next.config.js
Next.js - Force the creation of an index.html file for every page
module.exports = {
// forcing the creation of an index.html for every page to allow
// providers serving pages without having to add .html to the url
exportPathMap: async function (defaultPathMap) {
const pathMap = {};
for (const [path, config] of Object.entries(defaultPathMap)) {
if (path === "/") {
pathMap[path] = config;
} else {

There are two types of markup in Liquid: Output and Tag.

  • Output markup (which may resolve to text) is surrounded by
{{ matched pairs of curly brackets (ie, braces) }}
  • Tag markup (which cannot resolve to text) is surrounded by
@akoepcke
akoepcke / tailwind.config.ts
Created July 17, 2023 16:49 — forked from jordienr/tailwind.config.ts
Tailwind SVG Grid Background
// Remember to install mini-svg-data-uri
// Follow me on twitter for memes @jordienr
import { type Config } from "tailwindcss";
const {
default: flattenColorPalette,
} = require("tailwindcss/lib/util/flattenColorPalette");
const svgToDataUri = require("mini-svg-data-uri");
export default {
@akoepcke
akoepcke / LocalValetDriver.php
Created May 28, 2024 08:47 — forked from simonhamp/LocalValetDriver.php
Run anything you like through Laravel Herd
<?php
use Valet\Drivers\ValetDriver;
class LocalValetDriver extends ValetDriver
{
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return true;
}
@akoepcke
akoepcke / geospatial-queries-laravel.md
Created July 3, 2025 12:23 — forked from imrankabir02/geospatial-queries-laravel.md
Detailed Documentation: Implementing Geospatial Queries in Laravel

This document provides a comprehensive guide to implementing geospatial queries in Laravel applications. It covers setting up your database, installing necessary packages, defining spatial data in your models, and performing various types of geospatial queries using Laravel's Eloquent ORM and query builder.

Table of Contents:

  1. Introduction to Geospatial Queries in Laravel
  2. Prerequisites
  3. Step 1: Setting up Your Database for Spatial Support
    • 3.1. PostgreSQL with PostGIS Extension (Recommended)
    • 3.2. MySQL (5.6+)
  4. Step 2: Configuring Laravel Database Connection
@akoepcke
akoepcke / Chat.vue
Created July 3, 2025 15:50 — forked from joshcirre/Chat.vue
Simple Chat App with Vue and useStream
<script setup lang="ts">
import StreamingIndicator from '@/components/StreamingIndicator.vue';
import { useStream } from '@laravel/stream-vue';
import { onMounted, onUnmounted, ref, watch } from 'vue';
type Message = {
type: 'response' | 'error' | 'prompt';
content: string;
};
const messages = ref<Message[]>([]);
const { data, send, cancel, isStreaming, id } = useStream('chat');