Loading…
Browse by type
Tutorial reads
Tutorial posts on Yomu, summarised newest first.
- 615 posts
- 20 companies
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
Tutorial posts
React Native file upload with Supabase Storage
This tutorial shows how to build a React Native image-sharing or file-sharing app with Expo SDK49, Supabase Authentication, Expo Router v2, and Supabase Storage. It configures a Supabase project, turns off email confirmation for the tutorial, creates a private files bucket, and adds policies that constrain access to an authenticated user’s own folder. The React Native client stores sessions in AsyncStorage, uses the Image Picker and Expo File System, and initializes Supabase with environment-based URL and public key values. The resulting app supports account creation, sign-in, image selection, listing, download-based display, and deletion; resumable uploads are omitted because the attempted implementation produced files with zero bytes.
Enterprise
This workshop shows SaaS developers how to add SCIM provisioning to an application so enterprise customers can manage users across systems, including people who have not yet logged in. It builds SCIM server functionality into a React and Express Todo application, connects it to an Okta client, and tests lifecycle operations such as importing, updating, deprovisioning, and reprovisioning users. The implementation follows SCIM 2.0 with JSON-based REST endpoints for creating, retrieving, filtering, updating, and deleting users, plus bearer-token authentication, SCIM content-type headers, logging, and soft deletion. It also explains production considerations, including unique identifiers and mapping each request’s API token to the correct organization for multitenancy. The completed application supports OIDC authentication alongside SCIM provisioning.
Enterprise Maturity Workshop: Terraform
This workshop teaches how to use Okta’s Terraform provider to manage users and groups in an Okta Organization while practicing beginner and intermediate Terraform skills. It explains desired-state configuration, where terraform plan predicts changes and terraform apply makes them, and describes how providers, resources, variables, data sources, and the terraform.tfstate file fit into a project. The exercises cover provider setup with a client ID and private key, secret handling, creating and assigning users and groups, importing resources, refactoring files, formatting code, and controlling API usage. It also uses errors and configuration drift to show how Terraform and Okta can disagree, then compares importing manual changes with applying Terraform’s declared state. The workshop concludes with cleanup through terraform destroy and points to further provider and Terraform documentation.
How to Get Going with the On
This workshop setup guide prepares a minimal Todo SaaS application for a series of enterprise-readiness workshops, while warning that the base app is not production quality and has intentional security shortcomings. It uses a React frontend, an Express API written in TypeScript, SQLite persistence, Prisma for ORM and database visualization, and an Nx workspace for shared project commands. Developers install Node.js v18 or higher, obtain the repository, run npm ci, seed two users with npm run init-db, and start the application with npm start. The frontend runs on localhost:3000, the API on localhost:3333, and Prisma Studio on localhost:5555 for inspecting users and todos. The guide concludes by directing developers to workshops covering OpenID Connect, SCIM, Terraform, Okta Workflows, and cross-application sign-out.
7 Steps to a Complete Social Media Audit
Social media audits are presented as a way for marketers to connect channel activity with business goals and improve return on investment, especially when a small share of content or actions drives most results. The guide organizes the work into seven steps: reviewing analytics and presence, setting goals, analyzing performance, understanding the audience, studying competitors, and creating an action plan. It recommends consolidating channel data with a social media management platform or native analytics, using social listening to examine conversations, interests, and sentiment, and evaluating metrics such as engagement, reach, posting timing, website behavior, and conversions. The process ends with documented findings, team discussion, and prioritized changes aligned with company objectives, with an annual audit recommended.
Getting started with Flutter authentication
This tutorial shows how to add Google authentication to a cross-platform Flutter application using the Supabase SDK for Flutter. It explains OpenID Connect as a protocol built on OAuth 2.0, then configures Google Cloud client IDs for iOS, Android, and web, with Supabase using the web client ID to verify the supplied identity token. The sample initializes Supabase, starts Google sign-in through google_sign_in, passes the resulting access and ID tokens to signInWithIdToken, and listens for signed-in events to navigate from LoginScreen to ProfileScreen. The profile reads avatar_url and full_name from Supabase userMetadata, while a sign-out action returns the user to the login screen, producing a basic personalized app.
Contributing support for a Wasm instruction to Winch
Adding a WebAssembly instruction to Winch, Wasmtime’s baseline non-optimizing compiler, requires coordinated changes across code generation, register management, ISA-specific emission, and tests. The contribution described adds visitor support, delegates through CodeGenContext and MacroAssembler, emits x86_64 instructions through Cranelift-backed assembler methods, and registers the instruction for differential fuzzing. CodeGenContext keeps the value stack, register allocator, and function frame consistent, while spilling can move values to linear-memory offsets; MacroAssembler handles ISA differences, register constraints, and CPU feature fallbacks such as lzcnt versus bsr-based clz. Filetests inspect generated machine code without executing it, while differential fuzzing compares Winch results with another WebAssembly engine across randomly generated modules and inputs. The workflow also includes running fuzzing, incorporating draft-PR feedback, rebasing, and submitting the public Wasmtime pull request.
How to Add Authentication to .NET MAUI Apps
This tutorial shows how to add Okta-based authentication to a .NET MAUI application, covering project setup, OpenID Connect configuration, sign-in, sign-out, and platform integration. It uses IdentityModel.OidcClient, an OktaClient wrapper, an OktaClientConfiguration class, and a WebBrowserAuthenticator implementation to connect the application to Okta’s browser-based authorization flow. The walkthrough creates a native OIDC client with the Okta CLI, registers redirect and logout URIs using myapp://callback, configures dependency injection, and updates the UI to display claims after login. For Android, it adds a WebAuthenticationCallbackActivity with an intent filter for the myapp scheme and enables Custom Tabs visibility in AndroidManifest.xml. The post includes troubleshooting for NuGet configuration and runtime-pack errors, but notes that the Okta CLI was deprecated and the original instructions no longer work exactly as written after the May 2025 plan change.
Python Async Workers on Fly Machines
A Python web app needed to build and install libraries without blocking HTTP requests or risking backend failures when resource-heavy builds overlapped. The initial backend implementation sometimes ran for more than 30 minutes and could kill the backend, while always-on Celery workers left capacity idle. The proposed proof of concept stores job parameters in Redis, starts a Fly Machine through the Machines API with Redis key environment variables, executes a Python function, and writes the result back. A status endpoint polls the Machine state and returns PENDING until completion, after which cleanup deletes the Machine and Redis entries. The design pays for worker resources only during jobs, but the example requires JSON-serializable arguments and results and is presented as a simple implementation rather than a full job system.
ChatGPT plugins now support Postgres & Supabase
Retrieval plugins let ChatGPT access relevant content from private datasets by chunking documents, generating embeddings with OpenAI’s text-embedding-ada-002, and querying a vector database. The article describes Postgres and Supabase datastore implementations using pgvector, with a shared documents schema and a match_page_sections function that filters by source, author, document, and date before ranking vectors with inner product distance. It then gives a local example: downloading the Postgres 15 documentation as a PDF, uploading it through the plugin’s /upsert-file endpoint, and configuring environment variables for Supabase or Postgres. The example produced 7,904 document records, and an optional IVFFlat index can trade exact nearest-neighbor search for approximate search; after registering the local plugin in ChatGPT, users can ask questions answered from the documentation.
Vanilla with Candy Sprinkles
Vanilla with Candy Sprinkles presents a baseline full-stack Node.js application: a stateful visitor counter that increments across refreshes, tabs, browsers, and machines. The post starts with a dependency-free package.json and a 72-line server.js, then uses node-demo to generate variants with ECMAScript modules, EJS or Mustache templates, and Express. It adds SQLite3 or PostgreSQL for persistence, Tailwind CSS and TypeScript with a build step, and Drizzle, Knex, or Prisma as ORM options, noting differing language and build requirements. WebSockets provide real-time updates, htmx can handle client-side connection and DOM work, and Redis coordinates notifications across multiple servers; Fly.io deployment can scale the setup across eight instances in four regions. The concluding section points to further alternatives, including React, Angular, Lit, SolidJS, Svelte, Vue, esbuild, rollup, and other deployment targets, while inviting alternate implementations.
Building ChatGPT Plugins with Supabase Edge Runtime
A TypeScript template for ChatGPT Plugins runs on Supabase Edge Runtime and provides a path for exposing a TODO API to ChatGPT. The implementation serves the required ai-plugin.json manifest from an Edge Function because static file hosting is not currently supported, and generates an OpenAPI JSON document from endpoint JSDoc annotations with swagger-jsdoc. An Oak router defines TODO routes, while shared CORS headers allow requests from https://chat.openai.com and credentials. Docker configuration runs Edge Runtime locally with a bind-mounted functions directory, enabling changes without rebuilding and exposing requests through localhost:8000. The guide also covers local installation and testing through the ChatGPT UI, then deployment to Fly.io; it notes authentication as a possible next step.
Playing Traffic Cop with Fly-Replay
Fly.io’s fly-replay response header lets the Fly Proxy replay an HTTP request on another app, region, or VM within the same organization. The post explains how this can send writes near a leader database, preserve request locality after uploads, wake Machines stopped on exit, or route customer traffic across apps. It then builds a small Go reverse-proxy application that looks up the request hostname in SQLite and returns either app=our-default-app or the registered customer’s app in the header. Local request handling and lookup took about 4 ms, while the real-world proxy-and-replay path added about 100 ms; private customer apps remained reachable because Fly services can be defined without public IP addresses. The post also mentions LiteFS and internal DNS as possible discovery mechanisms.
Deploying LangChain to Fly.io
Deploying a minimal LangChain application to Fly.io, using Flask, requires a small Python project that accepts a place and asks an OpenAI-backed model for three places to eat there. The example uses LangChain’s OpenAI wrapper, PromptTemplate, temperature 0.9, and a default Berlin value, while Flask routes requests at / or / and renders the model’s split response in HTML. Local setup includes a virtual environment, pinned Flask, gunicorn, langchain, openai, and python-dotenv dependencies, with OPENAI_API_KEY stored in a local .env file; production uses gunicorn rather than Flask’s development server. Fly launch configures the app name, organization, and deployment region, and fly deploy builds and publishes an image before provisioning machines. The article concludes that more complex, user-dependent requests require LangChain agents and tools, such as Google Places API, because language models lack real-time data and internet browsing.
Securing your Flutter apps with Multi-Factor Authentication
The tutorial presents a Flutter app that requires multi-factor authentication before users can view its content, using email and password login followed by authenticator-app verification. It uses Supabase for authentication, supabase_flutter for client integration, go_router for routes and redirects, and flutter_svg to display a QR code for authenticator enrollment. During signup, users confirm their email through a deep link, enroll MFA, and then verify a code; login applies a similar second step. iOS and Android deep-link configuration directs the confirmation callback to the enrollment route, while routing checks the session and authenticator assurance level to send users to registration, enrollment, or verification as appropriate. The stated outcome is that only users who have signed in via MFA can access the home page, while optional MFA is identified as a possible future variation.
Infinite scroll with Next.js, Framer Motion, and Supabase
The post presents a tutorial for displaying Supabase Launch Week tickets with infinite scrolling in a Next.js page instead of loading every ticket at once. It fetches an initial batch of 20 tickets in getServerSideProps, then listens for window scroll events with a 200-millisecond Lodash debounce and checks the ticket container’s bottom against the viewport height. When the container reaches the viewport, Supabase range queries retrieve successive 20-ticket pages using an offset, and the results are appended to the existing list. Framer Motion animates each ticket from opacity 0 and y 20 into place, with index-based delays intended to create a staggered appearance. The tutorial also sets an isLast state when a response is shorter than PAGE_COUNT so scrolling can stop after the available tickets are loaded.
Lessons From Linguistics: i18n Best Practices for Front-End Developers
Front-end internationalization can fail when code encodes English assumptions about word order, punctuation, pluralization, gender, or text layout. The post uses an image-status example to show why a complete sentence should be translated as a whole, then examines interpolation through a reusable status bar whose file-type and count values vary across languages. It explains that plural categories can include zero, one, two, few, many, and other, with Polish examples showing why numeric rules should not be hardcoded, and that gender can affect articles and adjectives, as in French. Its recommended practices include keeping linguistic decisions in translation strings, avoiding code-level text construction and elaborate styled layouts, and letting i18n libraries select plural forms from quantities; complex promo layouts may need simplification or language-specific images.
Geo Queries with PostGIS in Ionic Angular
This tutorial shows how to build an Ionic Angular cross-platform app that stores and queries store locations with Supabase and PostGIS. It enables PostGIS, defines a stores table with a geography(POINT) location, adds a GiST spatial index, creates storage policies, and seeds example coordinates. SQL functions named nearby_stores and stores_in_view calculate distances or select stores inside a coordinate box, while Ionic uses Capacitor Google Maps and geolocation to display markers and query nearby data. The app also uploads store images to Supabase Storage, retrieves them with a 300-pixel contain transformation, and opens store details in an Ionic bottom-sheet modal after marker selection. The completed code is provided on GitHub and requires project and Google Maps credentials plus the included SQL.
Shipping Logs
Shipping Logs describes how Fly.io application stdout moves through the platform and how to centralize and retain it beyond Fly.io’s log lifetime. Apps run in Firecracker VMs, where an injected Rust init process captures stdout and sends it through host-side Go code to Vector, which publishes the logs to an internal NATS cluster; Flaps limits access to an organization’s logs. The Fly Log Shipper runs Vector as a NATS client and forwards organization-wide streams to a configured sink such as Logtail, Loki, Datadog, or Cloudwatch, using secrets for provider credentials. Deployment involves launching the image, removing the generated services section, adding an internal port, and running fly deploy. A SUBJECT environment variable can narrow collection with NATS subjects such as logs.sandwich.>, covering an app across regions and instances.
Type Constraints in 65 lines of SQL
PostgreSQL’s extensible type system can encode validation and presentation behavior for a custom Semantic Versioning (SemVer) type. The article stores major, minor, patch, pre-release, and build-metadata components in a composite type, then wraps that type in a domain whose check constraint rejects null or negative numeric components and invalid array elements. A SQL helper validates nullable arrays with regular expressions, and the domain automatically enforces these rules when values are inserted into a table. For ergonomics, a function formats the composite value as a SemVer string, while a stored generated column persists that representation; the article also notes possible parsers, operators, and aggregation functions. It concludes that the ceremony is worthwhile when data integrity is critical and the specification is stable or changes infrequently.
Top topics
- Architecture830
- Performance812
- LLMs648
- Machine Learning617
- Open Source561
- AI Agents542
- AI454
- Developer Experience446
Weekly digest
The best engineering reads, once a week.