# Jeffrey van Rossum > Product engineer based in the Netherlands. I design, build, and sell WordPress plugins and SaaS products, and take on select freelance work. Pages can be visited as markdown by appending `.md` to the URL (for example `/posts/introducing-veldform.md`). AI agents may also send `Accept: text/markdown`. ## Products - [Datalumo](https://datalumo.app/): Datalumo reads your website, docs and files, then answers your visitors' questions with AI. - [Gravity Forms Send to API](https://vanrossum.dev/products/gf-send-to-api.md): Forward Gravity Forms entries to virtually any REST API. Pick a method, authenticate, map your fields, and go. - [Veldform](https://vanrossum.dev/products/veldform.md): WordPress form builder that feels like a native extension of WordPress, with payments, API connections and AI. - [VoiceThisText.com](https://voicethistext.com/): A SaaS for generating, hosting, and distributing text-to-speech audio across several TTS models. ## Documentation ### Gravity Forms Send to API - [Introduction](https://vanrossum.dev/products/gf-send-to-api/docs/introduction.md) - [Installation](https://vanrossum.dev/products/gf-send-to-api/docs/installation.md) - [Feed](https://vanrossum.dev/products/gf-send-to-api/docs/feed.md) - [Merge tag manipulations](https://vanrossum.dev/products/gf-send-to-api/docs/merge-tag-manipulations.md) - [Value casting](https://vanrossum.dev/products/gf-send-to-api/docs/value-casting.md) - [Resend entries](https://vanrossum.dev/products/gf-send-to-api/docs/resend-entries.md) - [Debugging](https://vanrossum.dev/products/gf-send-to-api/docs/debugging.md) - [Requirements](https://vanrossum.dev/products/gf-send-to-api/docs/requirements.md) ### Veldform - [Introduction](https://vanrossum.dev/products/veldform/docs/introduction.md) - [Installation](https://vanrossum.dev/products/veldform/docs/installation.md) - [Form builder](https://vanrossum.dev/products/veldform/docs/form-builder.md) - [Entries](https://vanrossum.dev/products/veldform/docs/entries.md) - [Actions](https://vanrossum.dev/products/veldform/docs/actions.md) - [Merge tags](https://vanrossum.dev/products/veldform/docs/merge-tags.md) - [Connections](https://vanrossum.dev/products/veldform/docs/connections.md) - [Payments](https://vanrossum.dev/products/veldform/docs/payments.md) - [Custom API's](https://vanrossum.dev/products/veldform/docs/custom-apis.md) - [Anti-spam](https://vanrossum.dev/products/veldform/docs/anti-spam.md) - [Customization](https://vanrossum.dev/products/veldform/docs/customization.md) - [Roles & capabilities](https://vanrossum.dev/products/veldform/docs/roles-capabilities.md) - [Action and filter hooks](https://vanrossum.dev/products/veldform/docs/hooks.md) - [Troubleshooting](https://vanrossum.dev/products/veldform/docs/troubleshooting.md) ## Open source - [TailPress](https://tailpress.io/): WordPress starter theme with Tailwind CSS, Vite, and an installer. - [TailPress Framework](https://tailpress.io/): Framework for TailPress. - [TailPress Installer](https://tailpress.io/): Installer for TailPress. - [Paver Editor](https://pavereditor.com/): Drag-and-drop block editor built for PHP developers. - [WP Settings](https://github.com/jeffreyvr/wp-settings): Build settings pages for WordPress plugins without wrestling the Settings API. - [WP Meta Box](https://github.com/jeffreyvr/wp-meta-box): Register custom meta boxes in WordPress plugins with less boilerplate. - [Easy Liveblogs](https://github.com/jeffreyvr/easy-liveblogs): Liveblogs for WordPress, cover live events with real-time, chronological updates. - [WP Mail](https://github.com/jeffreyvr/wp-mail): Send polished, responsive WordPress emails with a fluent API. - [DropBlockEditor](https://github.com/jeffreyvr/dropblockeditor): Livewire-powered block editor for Laravel apps. - [Contextr](https://github.com/jeffreyvr/contextr): Analyze text with AI, spam, sentiment, moderation, with confidence scores. ## Writing - [All posts](https://vanrossum.dev/posts.md): Index of published posts - [Introducing Datalumo](https://vanrossum.dev/posts/introducing-datalumo.md): I'm launching Datalumo, search and AI chat over your own content. In this post I tell more about what it does, and a bit about how it's put together. - [DocSigner: sign PDFs in your browser](https://vanrossum.dev/posts/docsigner-sign-pdfs-in-your-browser.md): I built a small free tool to sign multi-page PDFs without uploading them. Draw a signature, stamp the pages, download. Everything stays on your device. - [I sold 143 licenses and never asked for feedback](https://vanrossum.dev/posts/i-sold-143-licenses-and-never-asked-for-feedback.md): My Gravity Forms add-on sold 143 licenses over the years, and I never once asked a customer what they thought. Last week I finally sent that email. Here is what happened. - [Simplifying WordPress Emails with a Fluent API](https://vanrossum.dev/posts/simplifying-wordpress-emails-with-a-fluent-api.md): As WordPress developers, we often need to send emails that look polished and professional. But out of the box, the `wp_mail` does not provide that. That’s where my latest packag... - [Video: WordPress theme development with Tailwind CSS and Vite](https://vanrossum.dev/posts/video-wordpress-theme-development-with-tailwind-css-and-vite.md): TailPress version 5 is out, and it's finally bringing you support for Vite, which means faster compiling and hot module reloading (even in the editor). ## About TailPress In [2... - [Video: making a Laravel package for contextr](https://vanrossum.dev/posts/video-making-a-laravel-package-for-contextr.md): In this video I give you a quick demo of [contextr](http://vanrossum.dev/44-ai-text-analysis-with-context-introducing-contextr), a PHP package for AI-driven text analysis for sp... - [AI text analysis with context: introducing contextr](https://vanrossum.dev/posts/ai-text-analysis-with-context-introducing-contextr.md): I’ve been working on something lately, and I’m excited to let you in on it. Meet **contextr**, a PHP package that uses AI to analyze text. Super handy if you want to spot spam... - [Using Paver as a Filament custom field](https://vanrossum.dev/posts/using-paver-as-a-filament-custom-field.md): Today I wanted to see if I could get Paver working within Filament. It was pretty easy, let's go through the steps. ## Install and setup Paver First, you [install](https://paver... - [Video: an introduction to block development with Paver](https://vanrossum.dev/posts/video-an-introduction-to-block-development-with-paver.md): In this video I introduce you to Paver, a block editor for PHP developers. I'm showing you how you can install it in a plain Laravel application, how you can add your own blocks... - [Introducing Paver](https://vanrossum.dev/posts/introducing-paver.md): Last weekend, I launched Paver. A drag-and-drop block editor built specifically for PHP developers. Currently it's in the pre-release stage. ## The Why Behind Paver Imagine a de... - [Laravel-like job dispatching for WordPress](https://vanrossum.dev/posts/laravel-like-job-dispatching-for-wordpress.md): Aside from WordPress development, I work a lot with Laravel. And one of the things I love about Laravel, is the Jobs API. In short: a dedicated class for your job that you can d... - [Using Flare with WordPress for error tracking](https://vanrossum.dev/posts/using-flare-with-wordpress-for-error-tracking.md): Flare, for me at least, is mostly known as an error tracker for Laravel applications. However, the service is framework agnostic and can be used for other frameworks, including W... - [2023 Year in review](https://vanrossum.dev/posts/2023-year-in-review.md): This year, my Year in Review is not a blogpost, but a post on X instead: Short version of Year in review this time:✅ First Laracon at @laraconeu, Lisbon - amazing! ✅ Launched op... - [WordPress and Composer](https://vanrossum.dev/posts/wordpress-and-composer.md): Using Composer to manage and load packages is commonplace in PHP projects, and most of the time, it just works. However, if you're developing a WordPress plugin or theme, you mi... - [Send to API v1.3.0 is now available](https://vanrossum.dev/posts/send-to-api-v130-is-now-available.md): Today version 1.3.0 of the Send to API add-on for Gravity Forms is released. This update contains a couple of nice new features. ![](https://i.ibb.co/9sgGyMC/gfsta-v1-3-0.png... - [Introducing DropBlockEditor](https://vanrossum.dev/posts/introducing-dropblockeditor.md): About a month ago, I tweeted that I was working on a drag and drop editor for Laravel and showed a little demo video. 🤠 I have been working on a @LaravelLivewire powered block edi... - [Block editor for Laravel](https://vanrossum.dev/posts/block-editor-for-laravel.md): Lately I've been working on a Livewire powered block editor. It is intended to be used mainly for creating newsletters. This package could potentially be used in tools as Mailco... - [2022 Year in review](https://vanrossum.dev/posts/2022-year-in-review.md): As the end of the year is nearing (time sure went fast), it is time to look back and ahead to the coming year. Previous editions: [2020](https://vanrossum.dev/22-2020-year-in-re... - [Introducing Gravity Forms Send to API](https://vanrossum.dev/posts/introducing-gravity-forms-send-to-api.md): This week I'm launching my first non open-source WordPress plugin. This plugin is an add-on for the popular form builder plugin [Gravity Forms](https://gravityforms.com) and is... - [A new website design](https://vanrossum.dev/posts/a-new-website-design.md): If you have visited my site before, you may have noticed that it has had a fresh coat of paint. I'm very happy with how things turned out! ## Why I could type a whole lot of wor... - [Dutch address autocomplete with Alpine.js](https://vanrossum.dev/posts/dutch-address-autocomplete-with-alpinejs.md): In the Netherlands, it's common for forms with address fields to try and autocomplete the street and city based on the zipcode and house number. ## Using Alpine.js In order to a... - [2021 year in review](https://vanrossum.dev/posts/2021-year-in-review.md): Today is January 1st of 2022 and as 2021 is now officially over, it's time to - like [last year](https://vanrossum.dev/22-2020-year-in-review) - look back a bit and review the p... - [Demo of the WordPress Settings package (video)](https://vanrossum.dev/posts/demo-of-the-wordpress-settings-package-video.md): Lately I've been working on a package to make it easier to create options/settings pages for WordPress plugins. Normally one could use the [Settings API](https://developer.wordp... - [WordPress theme development with TailwindCSS: recreating github.blog](https://vanrossum.dev/posts/wordpress-theme-development-with-tailwindcss-recreating-githubblog.md): I made a screencast which might be the start of a series, in which I recreate the [github.blog](https://github.blog) site with WordPress and TailwindCSS using [TailPress](https... - [2020 year in review](https://vanrossum.dev/posts/2020-year-in-review.md): Most posts on this website are quite technical in nature. This post will be a little different, no code snippets this time. This will be my first year in review (or recap) post... - [A Tailwind boilerplate for WordPress](https://vanrossum.dev/posts/a-tailwind-boilerplate-for-wordpress.md): For years I have been developing custom WordPress themes, mostly with Bootstrap (3 and later 4). But around a year ago, I started using [TailwindCSS](https://tailwindcss.com) in... - [Splitting the WordPress loop](https://vanrossum.dev/posts/splitting-the-wordpress-loop.md): Today I needed to make a post archive page for a WordPress-theme that contained several different grids in one loop. For example, the first two posts needed to be in a 50/50-gri... - [Using the WordPress WYSIWYG editor within custom Widgets](https://vanrossum.dev/posts/using-the-wordpress-wysiwyg-editor-within-custom-widgets.md): Sometimes you want to create a custom widget for your WordPress theme or plugin. And sometimes, you might want to include the tiny WYSIWYG editor like the one that is within the... - [Installing Memcached on CentOS and DirectAdmin for WordPress](https://vanrossum.dev/posts/installing-memcached-on-centos-and-directadmin-for-wordpress.md): This article will go through the steps to get Memcached installed on a Centos (7 or 8) server with DirectAdmin. I needed to install Memcached to make use of object caching in Wo... - [How to make WordPress-like custom fields for Laravel models](https://vanrossum.dev/posts/how-to-make-wordpress-like-custom-fields-for-laravel-models.md): Have you ever run into a situation where you want to be able to dynamically store data along with your Laravel Model, without having to add an (excessive) amount of columns to y... - [Handling media in Laravel with Laravel Simple Media](https://vanrossum.dev/posts/handling-media-in-laravel-with-laravel-simple-media.md): About two weeks ago, I published an open-source Laravel package on Github called [Laravel Simple Media](https://github.com/jeffreyvr/laravel-simple-media). The package enables y... - [Using Browsershot for PDF generation](https://vanrossum.dev/posts/using-browsershot-for-pdf-generation.md): Yesterday I was trying to tweak the invoice design for [Addrow](https://addrow.io), a SaaS application I made with [Laravel](https://laravel.com). I have basically two templates... - [Use CodeSnappy for good looking code snippet images](https://vanrossum.dev/posts/use-codesnappy-for-good-looking-code-snippet-images.md): Yesterday, I posted a Tweet that included a screenshot of a code snippet. Before I could take the screenshot I needed to toggle some settings in my code editor (VSCode), and aft... - [How to validate object ownership in Laravel](https://vanrossum.dev/posts/how-to-validate-object-ownership-in-laravel.md): There are several ways in which you can determine if a user owns an object in your Laravel application. This post will give you a couple of examples how you could implement this... - [A video walk-through of Addrow and future plans](https://vanrossum.dev/posts/a-video-walk-through-of-addrow-and-future-plans.md): In August last year, I [introduced Addrow](https://vanrossum.dev/3-invoicing-with-addrow) for the first time. [Addrow](https://addrow.io) is an invoicing web application which a... - [A simple way of implementing user bookmarks in Laravel](https://vanrossum.dev/posts/a-simple-way-of-implementing-user-bookmarks-in-laravel.md): For a recent project, I needed a way for users to bookmark posts. Other than posts, I imagine the application to have other objects in the future too. So, with this in mind, I d... - [Inspired Github theme for PHPStorm](https://vanrossum.dev/posts/inspired-github-theme-for-phpstorm.md): Since a couple of days I have been trying out PHPStorm. So far I really like it, but I notice that for quick changes I tend to refer back to Visual Studio Code. However, since u... - [Allow additional request methods Apache / DirectAdmin](https://vanrossum.dev/posts/allow-additional-request-methods-apache-directadmin.md): Just a quick tip again. This time about how you can add additional request methods like PUT, DELETE etc. to your Apache / DirectAdmin configuration. I couldn’t find the answer e... - [Invoicing with Addrow](https://vanrossum.dev/posts/invoicing-with-addrow.md): A couple of days ago I’ve made [Addrow](https://addrow.io) publicly available. Addrow is an app to make invoicing simple and even a little fun again. It has been a quiet launch... - [Using ngrok with Laravel](https://vanrossum.dev/posts/using-ngrok-with-laravel.md): If you like to temporarily expose your local development environment, you can do this with ngrok. If you use Laravel Valet for development, you already [have ngrok available](ht... - [Introducing Easy Liveblogs](https://vanrossum.dev/posts/introducing-easy-liveblogs.md): I’m very happy to announce that today, I published the Easy Liveblogs plugin on wordpress.org. It’s a free WordPress plugin that provides your WordPress site with the ability to... - [Localization with Framework7 and Vue](https://vanrossum.dev/posts/localization-with-framework7-and-vue.md): While creating an app with Framework7, I wanted to be able to localize strings to support other languages. I found the Vue I18n package, and it is actually quite easy to apply t... - [Making WordPress passwords work in Laravel](https://vanrossum.dev/posts/making-wordpress-passwords-work-in-laravel.md): When you are exporting WordPress users to a Laravel Application, you’ll notice that the hashed password from WordPress will not authenticate in Laravel. Now instead of your user... - [Using policies in Lumen](https://vanrossum.dev/posts/using-policies-in-lumen.md): Recently I’ve been using Lumen, basically a micro version of Laravel, to set up a REST API. I have been using the jwt-auth package from tymondesigns to be able to facilitate tok... ## Pages - [Home](https://vanrossum.dev/.md): Products, open source, writing, and freelance availability - [Contact](https://vanrossum.dev/contact.md): Get in touch - [Freelance Laravel developer (EN)](https://vanrossum.dev/en/freelance-laravel-developer.md): Hire me for Laravel work - [Freelance Laravel developer (NL)](https://vanrossum.dev/nl/freelance-laravel-developer.md): Freelance Laravel developer (Nederlands) - [Freelance WordPress developer (EN)](https://vanrossum.dev/en/freelance-wordpress-developer.md): Hire me for WordPress work - [Freelance WordPress developer (NL)](https://vanrossum.dev/nl/freelance-wordpress-developer.md): Freelance WordPress developer (Nederlands) ## Optional - [Privacy](https://vanrossum.dev/privacy.md) - [Terms](https://vanrossum.dev/terms.md) - [Cookies](https://vanrossum.dev/cookies.md)