Skip to content

Instantly share code, notes, and snippets.

@steffenr
steffenr / free_ai_model_credits.md
Last active August 30, 2026 18:31
Free AI Model Credits — a hand-checked list of working sign-up offers

Free AI Model Credits — a hand-checked list of working sign-up offers

Most model gateways will front you credit just for making an account — no card, no commitment. It is the cheapest way to find out how a model actually behaves on your prompts before you spend a cent. The problem is that half the offers you find online are dead, capped to a trial you can't use for real work, or quietly gated behind a card.

This is a short list of the ones that currently pay out and work with a normal coding tool (Claude Code, Codex, Cursor, opencode, oh-my-pi, …). Every entry is an Anthropic- or OpenAI-compatible endpoint: point your client at the base URL, paste the key, burn the

@steffenr
steffenr / my_module.post_update.php
Last active July 3, 2026 10:23
Updating text field length with existing data in Drupal 11
<?php
/**
* @file
* Post update functions for my_module module.
*/
declare(strict_types=1);
use Drupal\Core\Database\Database;
@steffenr
steffenr / my_module.install.php
Last active April 21, 2026 08:18
Fix mismatched rabbit_hole__settings field storage definitions.
<?php
/**
* Fix mismatched rabbit_hole__settings field storage definitions.
*/
function my_module_update_9001():void {
$updates = \Drupal::entityDefinitionUpdateManager();
$field_manager = \Drupal::service('entity_field.manager');
$entity_types = ['node', 'taxonomy_term'];
@steffenr
steffenr / po_to_csv.sh
Created December 8, 2023 07:46
Convert .po to .csv
#!/bin/bash
# Check if the required command-line argument is provided
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <po_file>"
exit 1
fi
po_file="$1"
csv_file="${po_file%.po}.csv"
@steffenr
steffenr / ip_adapter_face_sdxl.json
Created November 6, 2023 06:49
Simple IP-Adapter Face workflow with SDXL model
{
"last_node_id": 18,
"last_link_id": 29,
"nodes": [
{
"id": 10,
"type": "EmptyLatentImage",
"pos": [
790,
390
@steffenr
steffenr / THEMENAME_theme_suggestions_container_alter.php
Created November 28, 2019 07:10
Custom theme suggestions for container elements in drupal 8
<?php
/**
* Implements hook_theme_suggestions_alter() for container.
*/
function THEMENAME_theme_suggestions_container_alter(array &$suggestions, array &$variables)
{
$name = '';
$type = '';
if (isset($variables['element']['#name'])) {
@steffenr
steffenr / hook_update_n.php
Created August 20, 2019 06:55
Drupal 8 - Batch job in hook_update_n
<?php
use Drupal\node\Entity\Node;
/**
* Implements hook_update_N().
*
* Set default value to new field field_registered on all Person nodes.
*/
function MY_MODULE_update_8001(&$sandbox) {
@steffenr
steffenr / SCSS.md
Created February 4, 2019 08:20
Advanced SCSS, or, 16 cool things you may not have known your stylesheets could do

⇐ back to the gist-blog at jrw.fi

Advanced SCSS

Or, 16 cool things you may not have known your stylesheets could do. I'd rather have kept it to a nice round number like 10, but they just kept coming. Sorry.

I've been using SCSS/SASS for most of my styling work since 2009, and I'm a huge fan of Compass (by the great @chriseppstein). It really helped many of us through the darkest cross-browser crap. Even though browsers are increasingly playing nice with CSS, another problem has become very topical: managing the complexity in stylesheets as our in-browser apps get larger and larger. SCSS is an indispensable tool for dealing with this.

This isn't an introduction to the language by a long shot; many things probably won't make sense unless you have some SCSS under your belt already. That said, if you're not yet comfy with the basics, check out the aweso

@steffenr
steffenr / select2_behat_feature_context.php
Last active September 13, 2018 12:24
Behat / Select2 Feature context
<?php
/**
* @When /^(?:|I )fill in select2 input "(?P<field>(?:[^"]|\\")*)" with "(?P<value>(?:[^"]|\\")*)" and select "(?P<entry>(?:[^"]|\\")*)"$/
*/
public function iFillInSelectInputWithAndSelect($field, $value, $entry)
{
$page = $this->getSession()->getPage();
$inputField = $page->find('css', $field);
if (!$inputField) {
@steffenr
steffenr / id_map_custom.php
Created January 29, 2018 07:23
[Drupal 8] Override id map with custom plugin for migrations
<?php
/**
* Implements hook_migration_plugins_alter().
*/
function my_module_migration_plugins_alter(array &$migrations) {
foreach ($migrations as $id => $configuration) {
if (!empty($migrations[$id]['idMap'])) {
// Do not override existing values.
continue;