thejoecodes

dev blog by johnny mcfadden

What's Happening

Samson and Goliath, the Harland & Wolff cranes in BelfastH&WH&W

The latest from web, mobile, AI and infra, picked out of over a hundred YouTube channels, podcasts, newsletters and release feeds and refreshed every Monday.

  • Top videos
  • Releases
  • Talks
  • Podcasts
  • Trending repos
See this week

Latest Articles

// Sketchy's journal β€” the whole DB
// boils down to four tables and a
// single sync expo-sqlite handle.
const db = SQLite.openDatabaseSync(
'journal.db'
)

πŸ›Ή Sketchy - Skateboard Companion App

03 May 2026 β€’ πŸ“– 30 min read
β˜• Coffee needed

Behind the scenes of Sketchy, a skate companion app built on Expo SDK 55, React Native 0.83, expo-sqlite, OpenStreetMap and EAS, with the New Architecture and React Compiler turned on.

0
0
0
REACT NATIVE TYPESCRIPT
const intervalRef = useRef(null)
const resetGame = useCallback(() => {
clearInterval(intervalRef.current)
}, [])

πŸ•ΉοΈ Building 'Simple' React Games

21 Apr 2026 β€’ πŸ“– 19 min read
β˜• Coffee needed

What I learned refactoring two browser games: grouping state, useReducer, stale closures, timer cleanup, render-time randomisation bugs, and replacing three intervals with one rAF loop.

0
0
0
REACT JAVASCRIPT
<Pressable
accessibilityRole="button"
accessibilityLabel="Submit form"
onPress={handlePress}
/>

🦜Teaching React Native to Talk

17 Mar 2026 β€’ πŸ“– 18 min read β€’ Updated 18 Apr 2026
β˜• Coffee needed

What VoiceOver and TalkBack actually need from your app. Semantic roles, focus management, live regions, and the handful of props that make all the difference.

0
0
0
ACCESSIBILITY REACT NATIVE
const { userId } = useLocalSearchParams()
useEffect(() => {
getUserDetails(userId).then(setUser)
}, [userId])

🦸 Expo & Expo Router

21 Jan 2024 β€’ πŸ“– 30 min read β€’ Updated 16 Mar 2026
β˜• Coffee needed

Expo, EAS & Expo Router: one codebase covering web, Android, and iOS, with managed workflows, OTA updates, and file-based routing.

0
0
0
TYPESCRIPT REACT NATIVE
export const resources = {
en, fr,
} as const
type Locale = keyof typeof resources

🌐 React i18n TS Support

17 Dec 2023 β€’ πŸ“– 5 min read β€’ Updated 15 Mar 2026
⚑ Lightning read

Get full TypeScript intellisense for your i18n translations using "as const".

0
0
0
TYPESCRIPT REACT
// arrow: 'this' is always the class
logName = () => console.log(this.name)
// function: 'this' depends on caller
logName() { console.log(this.name) }

🏹 Regular Function vs Arrow Function

17 Aug 2023 β€’ πŸ“– 9 min read β€’ Updated 15 Mar 2026
β˜• Coffee needed

Learn the differences between normal functions and ES6 arrow functions.

0
0
0
JAVASCRIPT

Games

Particles

Shoot incoming particles before they collide with you.

JAVASCRIPT GAMES

Emoji React

A reaction speed game. How many positive emojis can you react to?

JAVASCRIPT GAMES

Colour Match

Match the target colour as fast as you can. Build streaks for bonus points!

JAVASCRIPT GAMES
Out Now on iOS & Android

Your skateboarding companion

8,000+ tricks to roll, firing lines with billions of combos, a roguelike climb mode, 30,000 spots on the map and a new trick on your lock screen every morning. Built for skaters, by a skater.

Inside the app

Apps & Sites

Push&Progress

Skateboarding lessons with accredited instructors across Northern Ireland.

SKATEBOARDING

SkateDice

Roll for your next trick. A skate dice web app.

SKATEBOARDING

Ringwork

COMING SOON

Your corner between rounds. Timers, combo generators, and session tracking for boxing training.

EXPO REACT NATIVE COMING SOON