Full-Stack Software Engineer
Next.js | React | Adonis.js | TypeScript | Node.js | Tailwind | PSQL
Good design, which makes technology both beautiful and useful, is key to creating things that people love to use.
Creating experiences that look good across the many devices users have access to in the modern age.
Building scalable systems and data structures while aligning with established architectural patterns.
Optimizing system performance and efficiency while ensuring clean, maintainable code structures.
A well crafted component
is simple to use,
uncluttered,
and yet
provides
every
wanted feature.
FRI
17
Stretches in Sun Before Coffee & Breaky
Now
Stand Up w/ Team
9:00am
Deep Work Block
10:00am
Meeting with Stakeholders
11:00am
18
19
no events
20
A component should also be visually appealing so the user enjoys interacting with it.
Analytics
|
January
1,704
February
1,952
March
1,072
April
2,481
May
1,968
June
2,073
A component should also be visually appealing so the user enjoys interacting with it.
60% faster page load times, increasing user satisfaction
Leaveraging the Incremental Static Regeneration (ISR) strategy by Next.js instead of the popular Server Side Rendering (SSR), Time To First Byte (TTFB) on thousands of pages is reduced from an average of 5.03 seconds to sub 0.5 seconds. This is done by building, caching and serving static pages on the server, and triggering rebuilds of those pages when the data changes.
import createSubscriber from 'pg-listen'
const subscriber = createSubscriber({
connectionString: process.env.DATABASE_URL,
})
// Listen to DB for changes
const channel = 'db-listener'
subscriber.notifications.on(channel, async (payload) => {
// Parse the payload from DB
const payLoadArr = payload.split(',')
const [table, idType, id] = payLoadArr
// Make request to revalidation endpoint
const response = await fetch('/api/revalidation', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
table,
idType,
id,
secret: process.env.REVALIDATION_SECRET,
}),
})
})
export default async function handler(req, res) {
// DB queries for revalidation
const users = async (id, idType) => {
const usersData = await users.findMany({
where: {
id: id,
}
})
return usersData.map((user) => `/users/${id}`)
}
// Setup to handle data from db-listener.ts
const tableHelpers = {
ads,
users,
}
const { table, idType, id } = req.body
const helperFunction = tableHelpers[table]
const paths = await helperFunction(id, idType)
// Calls Next.js Revalidate for each path
await Promise.all(
paths?.map(async (path) => {
await res.revalidate(path)
})
)
}
-- First create the notification function in PostgreSQL
CREATE OR REPLACE FUNCTION notify_on_change()
RETURNS trigger AS $$
BEGIN
-- Notify channel 'db-listener' with table,operation,id
PERFORM pg_notify(
'db-listener',
TG_TABLE_NAME || ',' ||
TG_OP || ',' ||
NEW.id
);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Create trigger for specific table
CREATE TRIGGER notify_trigger
AFTER INSERT OR UPDATE
ON users
FOR EACH ROW
EXECUTE FUNCTION notify_on_change();
Notable Work Links
Campus Reform
A mature news site and custom CMS that recently benifited from a complete refactor to utilize a modern stack including tRPC and TypeScript
Smartlist
Currently in Beta, a to-do app with more than a few unique features. Built alongside two native mobile apps using Firebase as a realtime database.
Patriot Compliance
A web application puts legal compliance into owners hands. Built using AdonisJS and Inertia to enable the use of React as a front-end.
Jig
For managing employees, assets, jobs, drawings and models, Jig is the all in one solution for the trades. Built with AdonisJS, Inertia and React Three Fiber