2026-05-26 11:12:08 +01:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > Blog — Tinqs Studio< / title >
< meta name = "description" content = "Dev logs, behind-the-scenes, and lessons learned from building games, tools, and platform infrastructure at Tinqs Studio." >
< meta name = "robots" content = "index, follow" >
< link rel = "canonical" href = "https://www.tinqs.com/blog/" >
< meta property = "og:type" content = "website" >
< meta property = "og:url" content = "https://www.tinqs.com/blog/" >
< meta property = "og:title" content = "Blog — Tinqs Studio" >
< meta property = "og:description" content = "Dev logs, behind-the-scenes, and lessons learned from building games, tools, and platform at Tinqs Studio." >
< meta property = "og:image" content = "https://www.tinqs.com/img/og-cover.jpg" >
2026-06-02 22:19:34 +01:00
<!-- PostHog (EU) -->
< script >
! function ( t , e ) { var o , n , p , r ; e . _ _SV || ( window . posthog = e , e . _i = [ ] , e . init = function ( i , s , a ) { function g ( t , e ) { var o = e . split ( "." ) ; 2 == o . length && ( t = t [ o [ 0 ] ] , e = o [ 1 ] ) , t [ e ] = function ( ) { t . push ( [ e ] . concat ( Array . prototype . slice . call ( arguments , 0 ) ) ) } } ( p = t . createElement ( "script" ) ) . type = "text/javascript" , p . crossOrigin = "anonymous" , p . async = ! 0 , p . src = s . api _host . replace ( ".i.posthog.com" , "-assets.i.posthog.com" ) + "/static/array.js" , ( r = t . getElementsByTagName ( "script" ) [ 0 ] ) . parentNode . insertBefore ( p , r ) ; var u = e ; for ( void 0 !== a ? u = e [ a ] = [ ] : a = "posthog" , u . people = u . people || [ ] , u . toString = function ( t ) { var e = "posthog" ; return "posthog" !== a && ( e += "." + a ) , t || ( e += " (stub)" ) , e } , u . people . toString = function ( ) { return u . toString ( 1 ) + ".people (stub)" } , o = "init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug" . split ( " " ) , n = 0 ; n < o . length ; n ++ ) g ( u , o [ n ] ) ; e . _i . push ( [ i , s , a ] ) } , e . _ _SV = 1 ) } ( document , window . posthog || [ ] ) ;
posthog . init ( 'phc_teG6p5oxf6poQHPThq5AGKzWQNhw4bHW9arLwWAVXm3f' , { api _host : 'https://eu.i.posthog.com' , ui _host : 'https://eu.posthog.com' , person _profiles : 'identified_only' , defaults : '2026-01-30' } )
< / script >
2026-05-26 11:12:08 +01:00
< link rel = "icon" type = "image/svg+xml" href = "/img/favicon.svg" >
< link rel = "preconnect" href = "https://fonts.googleapis.com" >
< link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin >
< link href = "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap" rel = "stylesheet" >
< link rel = "stylesheet" href = "../style.css" >
2026-06-02 22:50:20 +01:00
< style >
/* ── Team guide aesthetic: self-contained overrides ── */
/* ── Section label kicker ── */
. section-label {
display : inline-block ;
font-family : ui-monospace , 'SF Mono' , 'Cascadia Code' , Consolas , monospace ;
font-size : 0.72 rem ;
letter-spacing : 0.22 em ;
text-transform : uppercase ;
color : #38bdf8 ;
border : 1 px solid rgba ( 147 , 140 , 129 , 0.25 ) ;
border-radius : 999 px ;
padding : 4 px 14 px ;
margin-bottom : 16 px ;
}
/* ── Gradient index title ── */
. blog-header__title {
background : linear-gradient ( 90 deg , #c9935a , #f59e0b 40 % , #38bdf8 ) ;
-webkit- background-clip : text ;
background-clip : text ;
color : transparent ;
font-weight : 800 ;
}
/* ── Date pill ── */
. blog-card__date {
display : inline-block ;
font-family : ui-monospace , 'SF Mono' , 'Cascadia Code' , Consolas , monospace ;
font-size : 0.72 rem ;
letter-spacing : 0.22 em ;
text-transform : uppercase ;
color : #38bdf8 ;
border : 1 px solid rgba ( 147 , 140 , 129 , 0.25 ) ;
border-radius : 999 px ;
padding : 4 px 14 px ;
margin-bottom : 10 px ;
}
/* ── Card hover accent ── */
. blog-card : hover {
border-color : #c9935a ;
}
/* ── Read link accent ── */
. blog-card__read {
color : #38bdf8 ;
}
. blog-card : hover . blog-card__read {
color : #a855f7 ;
}
< / style >
2026-05-26 11:12:08 +01:00
< / head >
< body >
<!-- NAV -->
< nav class = "nav nav--scrolled" id = "nav" >
< a href = "/" class = "nav__logo" aria-label = "Tinqs home" >
< span class = "nav__wordmark" > TINQS< / span >
< / a >
< div class = "nav__links" >
< a href = "/#game" class = "nav__link" > Games< / a >
< a href = "/#tech" class = "nav__link" > Technology< / a >
< a href = "/#about" class = "nav__link" > About< / a >
< a href = "/blog/" class = "nav__link" style = "color: var(--c-accent-l);" > Blog< / a >
< a href = "/#signup" class = "nav__link" > Contact< / a >
< a href = "/press" class = "nav__link" > Press< / a >
< / div >
< button class = "nav__burger" aria-label = "Open menu" id = "navBurger" >
< span > < / span > < span > < / span > < span > < / span >
< / button >
< / nav >
<!-- MOBILE MENU -->
< div class = "mobile-menu" id = "mobileMenu" >
< a href = "/#game" class = "mobile-menu__link" > Games< / a >
< a href = "/#tech" class = "mobile-menu__link" > Technology< / a >
< a href = "/#about" class = "mobile-menu__link" > About< / a >
< a href = "/blog/" class = "mobile-menu__link" > Blog< / a >
< a href = "/#signup" class = "mobile-menu__link" > Contact< / a >
< a href = "/press" class = "mobile-menu__link" > Press< / a >
< / div >
<!-- BLOG HEADER -->
< div class = "blog-header" >
< span class = "section-label" > Dev Log< / span >
< h1 class = "blog-header__title" > From the Workshop< / h1 >
< p class = "blog-header__subtitle" > Behind-the-scenes notes on building games, forging tools, and running a small studio that punches above its weight.< / p >
< / div >
<!-- BLOG LIST -->
< div class = "blog-list" >
2026-06-03 02:47:06 +01:00
<!-- hand - authored HTML posts (not from build.js) -->
< a href = "pi-flow-native-brain" class = "blog-card" >
< span class = "blog-card__date" > 3 June 2026< / span >
< h2 class = "blog-card__title" > How Pi Agents Build, Test, and Ship Game Code with Oracle-Backed Flows< / h2 >
< p class = "blog-card__excerpt" > When we ask Pi to build a game feature, it doesn't just write code. It compiles, runs tests, drives the live game, measures feel, fixes CI failures, and ships a green PR — all through composable oracle-backed flows.< / p >
< span class = "blog-card__read" > Read → < / span >
< / a >
2026-05-26 11:12:08 +01:00
{{CARDS}}
< / div >
<!-- FOOTER -->
< footer class = "footer" >
< div class = "footer__inner" >
< span class = "footer__wordmark" > TINQS< / span >
< div class = "footer__links" >
< a href = "/#game" > Games< / a >
< a href = "/#tech" > Technology< / a >
< a href = "/#about" > About< / a >
< a href = "/blog/" > Blog< / a >
< a href = "mailto:hello@tinqs.com" > hello@tinqs.com< / a >
< a href = "/press" > Press Kit< / a >
< / div >
< p class = "footer__copy" > Tinqs Limited — London, est. 2020< / p >
< / div >
< / footer >
< script >
const burger = document . getElementById ( 'navBurger' ) ;
const mobileMenu = document . getElementById ( 'mobileMenu' ) ;
burger . addEventListener ( 'click' , ( ) => {
const open = mobileMenu . classList . toggle ( 'mobile-menu--open' ) ;
burger . classList . toggle ( 'nav__burger--open' , open ) ;
document . body . style . overflow = open ? 'hidden' : '' ;
} ) ;
mobileMenu . querySelectorAll ( 'a' ) . forEach ( link => {
link . addEventListener ( 'click' , ( ) => {
mobileMenu . classList . remove ( 'mobile-menu--open' ) ;
burger . classList . remove ( 'nav__burger--open' ) ;
document . body . style . overflow = '' ;
} ) ;
} ) ;
< / script >
< / body >
< / html >