Skip to content

Instantly share code, notes, and snippets.

View JefCurtis's full-sized avatar
👋
Bring it on.

Jef Curtis JefCurtis

👋
Bring it on.
View GitHub Profile
@JefCurtis
JefCurtis / adaptive-wobbling-thimble.md
Last active February 12, 2026 23:23
Integrations Pages Migration Plan: Next.js → Astro

Integrations Pages Migration Plan: Next.js → Astro

Status

  • Phase 1: Data Infrastructure & Home Page - Complete
  • Phase 2: Category & Search Pages - In Progress
  • Phase 3: Detail & Collection Pages - Not Started

@JefCurtis
JefCurtis / curried-sparking-thompson.md
Created February 10, 2026 20:03
Karma Page Migration Plan: Next.js → Astro

Karma Page Migration Plan: Next.js → Astro

Context

The karma page currently exists in the Next.js todoist-landing-pages app and needs to be migrated to the Astro todoist-astro app. This migration is part of the broader effort to consolidate all marketing pages into the Astro codebase for better performance, simpler deployment, and improved developer experience.

The karma page showcases Todoist's productivity tracking feature with:

  • Dynamic OG images based on karma level (1-7) and streak days (7, 30, 60, 100)
  • Localized content across 19 languages
  • Product UI integration for scene images
@JefCurtis
JefCurtis / gist:6be20d22c31c4301bf180cb08fee97bd
Created January 15, 2026 18:41
[26Q1] 🚀 Astro Migration for Landing Pages
[David M](twist-mention://4028) and I, are spearheading the migrating of our marketing landing pages from Next.js to Astro! 🎯
This continues the successful experimentation we've been doing with Astro (Help Center and pairing sessions) and we're now ready to tackle the full landing pages migration.
**Why Astro?**
Our current Next.js setup has significant pain points: slow page loads, large client bundles, and poor performance, especially on slower connections and mobile devices. We're hitting Next.js limitations that block us from achieving our performance goals, and the framework just seems to be heading in the wrong direction for what we need it for.
Astro solves these problems with near-zero JavaScript by default and static generation. Plus, we keep our existing Atomic React components—no full rewrite needed.
@JefCurtis
JefCurtis / .gitignore
Last active September 12, 2018 17:31
Git ignore file
config/dev/
@JefCurtis
JefCurtis / package_V3.json
Last active September 12, 2018 18:06
Gmail add-on: Add production build script command
{
"scripts": {
"build:prod": "DEPLOY_ENV=prod webpack --config config/webpack/webpack.config.js",
"build": "DEPLOY_ENV=dev webpack --watch --config config/webpack/webpack.config.js",
"sync": "cd build/ && clasp push"
}
},
@JefCurtis
JefCurtis / webpack_v5.config.js
Last active September 12, 2018 18:01
Gmail add-on: Copy clasp.json file to the build directory
const { env } = require("process");
const deployEnv = env.DEPLOY_ENV || "dev";
[...]
module.exports = {
[...]
plugins: [
new CopyWebpackPlugin([
{ from: join(root, `config/${deployEnv}/.clasp.json`), to: ".", ToType: "file" },
]),
@JefCurtis
JefCurtis / package_v2.json
Last active September 12, 2018 07:19
Gmail add-on: Add sync and push command
{
"scripts": {
"sync": "DEPLOY_ENV=dev webpack --watch --config config/webpack/webpack.config.js",
"push": "cd build/ && clasp push"
}
}
@JefCurtis
JefCurtis / webpack_v4.config.js
Last active September 12, 2018 17:34
Gmail add-on: Copy Webpack plugin. Hook after emit.
const exec = require("child_process").exec;
[...]
module.exports = {
[...]
plugins: [
[...]
new CopyWebpackPlugin([
{ from: join(root, "config/dev/.clasp.json"), to: ".", ToType: "file" },
]),
{
@JefCurtis
JefCurtis / .clasp.json
Last active September 4, 2018 04:57
Gmail add-on: Clasp JSON file
{
"scriptId":"10r3UYeLI…"
}
@JefCurtis
JefCurtis / webpack_v3.config.js
Last active September 12, 2018 16:28
Gmail add-on: Add HTML Webpack plugin for AppsScript template
const HtmlWebpackPlugin = require("html-webpack-plugin");
[...]
module.exports = {
[...]
plugins: [
new HtmlWebpackPlugin({
filename: "appsscript.json",
template: join(root, "config", "appsscript.json.ejs"),
chunks: [],