<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Litinera]]></title><description><![CDATA[Language learning with short daily stories]]></description><link>https://dmartuk.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!6iub!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fdmartuk.substack.com%2Fimg%2Fsubstack.png</url><title>Litinera</title><link>https://dmartuk.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 05 Sep 2026 03:12:46 GMT</lastBuildDate><atom:link href="/__u/dmartuk.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[dmartuk]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[dmartuk@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[dmartuk@substack.com]]></itunes:email><itunes:name><![CDATA[Daniel]]></itunes:name></itunes:owner><itunes:author><![CDATA[Daniel]]></itunes:author><googleplay:owner><![CDATA[dmartuk@substack.com]]></googleplay:owner><googleplay:email><![CDATA[dmartuk@substack.com]]></googleplay:email><googleplay:author><![CDATA[Daniel]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How I created a landing page for my upcoming app]]></title><description><![CDATA[Everything from design &#8594; build &#8594; launch]]></description><link>https://dmartuk.substack.com/p/how-i-created-a-landing-page-for</link><guid isPermaLink="false">https://dmartuk.substack.com/p/how-i-created-a-landing-page-for</guid><dc:creator><![CDATA[Daniel]]></dc:creator><pubDate>Mon, 15 Sep 2025 23:15:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UpwJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!UpwJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!UpwJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg" width="1456" height="1165" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/$s_!UpwJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1165,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:261533,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/172987563?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!UpwJ!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c9745e-4029-404f-9b55-29f0213de210_3840x3072.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Exciting news, everyone&#8230;!</p><p>This past weekend, I built and launched the first version of my app&#8217;s landing page.</p><p>You can find it at <a href="https://www.get3b.com">www.get3b.com</a>.</p><p>I&#8217;ve dedicated this edition of my newsletter to give you all a behind-the-scenes look at how I designed, built, and deployed my landing page.</p><h3><strong>Designing the landing page</strong></h3><p>The landing page starts with the splash section, which is what users first see when they navigate to the site.</p><p>Its purpose is simple: highlight why users should care, and give them a call to action.</p><p>My tagline for 3B is that it&#8217;s &#8220;Duolingo meets Dungeons &amp; Dragons&#8221; &#8212; you&#8217;re learning a language while you&#8217;re the main character in an ever-evolving story.</p><p>Ideally I&#8217;d like there to be 2 calls-to-action (CTAs): one to start playing (which takes you to the web app) and one to take you to the App Store. But I built the web version or the iOS version of the app. Yet. Stay tuned.</p><p>The remainder of the landing page provides more context on how the app works and what it offers.</p><ul><li><p><strong>Learn like you&#8217;re in a story</strong> &#8594; This is the &#8220;about section&#8221; of the landing page. Most of the time, users will be in the &#8220;story mode&#8221; part of the app, so this section shows what that currently looks like to give prospects an overall impression of what they can expect to experience.</p></li><li><p><strong>Enter a world of languages</strong> &#8594; Fun fact: I haven&#8217;t yet decided which languages will be offered at launch. There will be an upcoming devlog dedicated to this open question.</p></li><li><p><strong>Frequently asked questions</strong> &#8594; I&#8217;ll admit this section doesn&#8217;t serve a clear purpose at the moment, apart from linking to a larger kind of glossary of FAQs and explanations about how this app will work.</p></li><li><p><strong>Ready for your story to begin?</strong> &#8594; A final invitation with a CTA that links to the web app&#8217;s subdomain.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pNHP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pNHP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:349932,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/172987563?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!pNHP!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b59879-9732-4f8f-b750-2b766965edc4_3200x2400.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Overall, the landing page is simple but I think it gets the job done without too much sprawl.</p><p>And it was loads of fun to design!</p><h3><strong>Building the landing page</strong></h3><p>Once I settled on what I wanted my app landing page to look like, it was time to build &amp; launch so that the world can interact with it.</p><p>As it turns out, there are a lot of ways to build a website.</p><p>Some options like Wix, Webflow, and Sqarespace all you to create your website visually without writing much code.</p><p>Because I enjoy the coding process, I decided to build my responsive landing page from scratch using the usual suspects: HTML, CSS, and a bit of JavaScript. I also used Flask, a Python library that makes managing HTML templates and components much, much simpler.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OGmD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 424w, /__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 848w, /__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OGmD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png" width="480" height="805.4237288135594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:990,&quot;width&quot;:590,&quot;resizeWidth&quot;:480,&quot;bytes&quot;:80374,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/172987563?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 424w, /__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 848w, /__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OGmD!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59581561-e4f0-4abf-acb5-c1955d3c1fb7_590x990.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">All the files and folders that went into building my app landing page</figcaption></figure></div><h3>Deploying the landing page</h3><p>Everything I&#8217;ve described so far is a bundle of code that only runs on my personal computer. </p><p>The last step was to deploy the bundle of code so that other people could interact with it on the internet.</p><p>Lots of services exist for this kind of use case &#8212; Amazon Web Services, Google Cloud Platform, Heroku, etc. I ended up going with Fly.io because it&#8217;s uncomplicated and the pricing structure works well for my budget.</p><p>Once I deployed the code bundle, I connected to a custom domain I bought for people to find my upcoming app, 3B.</p><p>And voil&#224;! <a href="https://www.get3b.com">www.get3b.com</a> is now live!</p><div><hr></div><p>As always, thank you kindly for reading this devlog! I greatly appreciate your support!</p><p>Made with &#10084; by dmartuk</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dmartuk.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading 3B Languages! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Design Digression: Duolingo Meets Apple Fitness]]></title><description><![CDATA[Close your activity rings by learning a language]]></description><link>https://dmartuk.substack.com/p/design-digression-duolingo-meets</link><guid isPermaLink="false">https://dmartuk.substack.com/p/design-digression-duolingo-meets</guid><dc:creator><![CDATA[Daniel]]></dc:creator><pubDate>Sun, 07 Sep 2025 17:57:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uH-4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!uH-4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!uH-4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:532674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/173027642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!uH-4!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb480e26-24ad-425b-b4a1-f9466466f4df_3200x2400.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I design (and build!) language learning apps. It's one of my passions.</p><p>This weekend, I decided to digress a little from my main project and do a little UI exploration. </p><p>Today&#8217;s idea is simple: it&#8217;s &#8220;Duolingo meets Apple Fitness.&#8221; You close your activity rings by learning a language.</p><h3><strong>A learning experience inspired by Apple Fitness</strong></h3><p>The UX borrows a familiar, mildly addictive element from Apple Fitness: the daily ring. </p><p>Users make progress by completing lessons, practice scenarios, and weekly reviews. This all results in a visually pleasing &#8220;closing the loop&#8221; each day.</p><p>And while the app is tracking progress towards vocabulary, grammar, and other linguistic competencies, these aren't directly shown to the user in their daily summary. </p><p>The reasoning behind this design decision is to allow the user to focus on actions that can move the needle, rather than abstractions (like proficiency) which are harder to understand improvements towards.</p><p>Think of it like "I exercised for 30 minutes today" vs. "I exercised until my average BPM dropped from 130 to 125." In the first scenario, I know exactly what I need to do to reach the goal (I exercise for 30 minutes). In the second scenario, its very unclear to me what I need to do to reach that goal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!cH_v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!cH_v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:213449,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/173027642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!cH_v!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83076c58-16d1-4926-adba-c1d8a83a8d6b_3840x3840.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Minimalism meets visual accessibility</h3><p>The interface itself follows a minimalist, accessibility-focused design. All screens meet either AA or AAA visual accessibility expectations.</p><p>But the part of this design study that I really had fun with was the learning activities. These are the screens that show multiple choice, matching, and other kinds of questions.</p><p>Below is the full UI that resulted from this exploration.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!c2R7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!c2R7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:440414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/173027642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!c2R7!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c187c27-935a-40f6-a722-3ef646f5696c_3200x2400.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I enjoyed this little digression, and I hope you did too!</p><p>Thanks for reading on this lovely Sunday afternoon!</p><p>And don&#8217;t worry &#8212; I&#8217;ll be back to my main project (&#8220;Duolingo x Dungeons &amp; Dragons&#8220;) next week.</p><div><hr></div><p>Made with &#10084; by dmartuk</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dmartuk.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading 3B Languages! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Dev Log #1 — Building 3B: It's Duolingo meets D&D]]></title><description><![CDATA[Concept designs and a first look at the user experience]]></description><link>https://dmartuk.substack.com/p/dev-log-1-building-3b-its-duolingo</link><guid isPermaLink="false">https://dmartuk.substack.com/p/dev-log-1-building-3b-its-duolingo</guid><dc:creator><![CDATA[Daniel]]></dc:creator><pubDate>Thu, 21 Aug 2025 21:53:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!THX5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51b38414-f375-4d80-8693-8caa1c2d9b20_396x396.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the very first edition of my developer log! I&#8217;m so glad you&#8217;re here!</p><p>I&#8217;m building a text adventure language learning app that blends interactive storytelling with adaptive learning. </p><p>The idea is simple but effective: as you explore different times and places, you&#8217;ll pick up vocabulary, grammar, and writing skills. The app tracks your progress and dynamically changes the story in real time, helping reinforce what you&#8217;ve learned while guiding you toward long-term retention.</p><p>This dev log will give an overview of some features I&#8217;ve started working on: the storytelling component and the learning mechanisms.</p><h2>Seeding the story</h2><p>One of the most unique aspects of this app is the ongoing narrative component. You&#8217;re part of a continuously evolving story that both shapes your learning experience, and allows you to shape it in return.</p><p>The journey currently begins by letting you choose a place (and time, if it&#8217;s in the past) where you&#8217;d like your journey to begin. Different locations will feature unique scripted events and culturally distinct content.</p><p>And once you&#8217;ve progressed sufficiently, you&#8217;ll be able to travel to different locations.</p><p>The example below shows the start of learning Classical Latin, where you can choose where and when to begin your journey.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_Nci!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_Nci!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:828825,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/169763419?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!_Nci!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0a5354-5134-410e-80c8-f2f0a4dfd947_3840x2880.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Because this app is about narrative, exploration, and world-building in a new language, I envision different locations offering different events and objectives. Some grammar and vocabulary will be core parts of any location you visit, but some will be unique. </p><p>Foods, festivals, modes of transportation, and geographical sights of interest will require different grammar and vocabulary to navigate and interact with.</p><h2>The learning experience</h2><p>The heart of the app is its adaptive learning system. Without it, the app would just be a walking simulator.</p><p>As you navigate the world around you, you&#8217;ll encounter new vocabulary and grammar in context. But you&#8217;ll also be asked to recall words and phrases that you&#8217;ve used before.</p><p>This learning engine attempts to mimic how we use language in everyday contexts. Some words, like &#8220;this&#8221; and &#8220;pay for&#8221; are highly frequent, while other words or grammatical constructions are less frequent. </p><p>The app keeps track of every word and phrase you&#8217;ve seen, how well you&#8217;ve demonstrated that you know it, and how long it&#8217;s been since you last used it. This allows the app use methods like <strong>spaced repetition</strong> and <strong>interleaving</strong> to improve recall and retention.</p><p>For learning how to read and write, the app&#8217;s tracking of your mastery of characters and specific syllable combinations is also used to guide you towards working proficiency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ycs4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ycs4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:774949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/169763419?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ycs4!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ed87d2-1a81-40ec-9a35-0c381f9b6c86_3840x2880.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Successfully implementing a learning engine with this level of tracking and narrative integration is the core user experience challenge this app presents, from an engineering and design perspective.</p><h2>Designing for smaller screens</h2><p>Small screens can bring big challenges, especially when you&#8217;re designing for a web-first user experience.</p><p>The most obvious challenge comes in the form of smaller visual real estate for what is currently a text-heavy user experience. </p><p>Part of the solution here is to make sure content is scrollable. But greater value comes from ensuring that individual interactions are bite-sized and don&#8217;t require reading large gobs of text to figure out what&#8217;s going on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!22u5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_webp, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!22u5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1939115,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dmartuk.substack.com/i/169763419?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_424, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_848, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_1272, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!22u5!, /__u/dmartuk.substack.com/w_1456, /__u/dmartuk.substack.com/c_limit, /__u/dmartuk.substack.com/f_auto, /__u/dmartuk.substack.com/q_auto:good, /__u/dmartuk.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89ded5ff-55ed-42c7-a4a5-401152e141a6_3840x3840.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Other challenges of shifting from large to small screens are more manageable. For example, the sidebar that&#8217;s present in the web version of the app becomes a callable sheet on an iPhone.</p><p>This ensures that the limited space on a phone is used to maximize the readability of the narrative text and action buttons available to a user.</p><h2>Looking forward</h2><p>Thanks for reading my first-ever dev log!</p><p>In future dev logs, I&#8217;ll share more about how scenes are designed, how the knowledge tracking system works under the hood, and how I&#8217;m integrating feedback loops with learners. </p><p>For now, I&#8217;m excited to continue building out the user interace and refining the adaptive system that powers the learning experience.</p><p>Stay tuned! </p><p>And if you have any thoughts about where this app could go in the future, please drop me a line!</p><p>&#8212;Created with &#10084; by dmartuk</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dmartuk.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Building 3B! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[I’m Building 3B, An Immersive Language Learning App]]></title><description><![CDATA[It's like Duolingo meets Dungeons & Dragons: part language learning, part world building, and all fun.]]></description><link>https://dmartuk.substack.com/p/im-building-3b-an-immersive-language</link><guid isPermaLink="false">https://dmartuk.substack.com/p/im-building-3b-an-immersive-language</guid><dc:creator><![CDATA[Daniel]]></dc:creator><pubDate>Wed, 30 Jul 2025 22:54:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!THX5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51b38414-f375-4d80-8693-8caa1c2d9b20_396x396.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi there, thanks for stopping by!</p><p>I&#8217;m starting this newsletter to chronicle my journey of creating a playable prototype for an app I&#8217;ve been dreaming about for a long, long time. It&#8217;s a &#8220;choose-your-own-adventure&#8221; style game designed to help people learn languages, and have fun while they&#8217;re doing it.</p><p>Imagine a game where the dialogue is the learning. You&#8217;re not memorizing flashcards or taking grammar quizzes. Instead, you&#8217;re interacting with characters, making choices, picking up words, and navigating a world where language becomes your tool for survival, exploration, and growth.</p><p>This is the kind of experience I&#8217;m aiming to create.</p><h2>Why I&#8217;m Building This</h2><p>This passion project that stands at the intersection of (almost) everything I love:<br>&#127757; languages<br>&#127918; games<br>&#129504; learning systems<br>&#127912; design systems<br>&#128214; narratives</p><p>There are plenty of language learning apps out there, but I often find they miss something essential to my needs: learning in context. We remember best when we care. And what better way to care than to step into a story where you&#8217;re the main character?</p><p>With all this in mind, my near-term goal is to build a game that lets you:</p><ul><li><p>Choose the language you're learning</p></li><li><p>Choose your character and path</p></li><li><p>Watch your story (and vocabulary) grow together</p></li></ul><p>So whether you&#8217;re learning Eastern Armenian or Old English, I want this to feel like your story. You&#8217;re the protagonist, and your actions shape the world around you.</p><p>And if you&#8217;re getting RPG vibes from this, then you&#8217;re feeling what I&#8217;m feeling.</p><h2>My Plan: A Playable Prototype by the End of 2025</h2><p>I&#8217;m giving myself 24 weeks to build and share a playable prototype. I&#8217;ve sketched out a roadmap for releasing early visuals, gathering feedback, posting devlogs, and within a few months, letting people try the first installment.</p><p>Here&#8217;s what you can expect along the way:</p><ul><li><p>Behind-the-scenes devlogs (UI, narrative engine, learning systems)</p></li><li><p>Learning design challenges and solutions for teaching different languages</p></li><li><p>Early access sneak peeks and prototype tests</p></li><li><p>Open calls for feedback and future feature votes</p></li></ul><p>I&#8217;ll be sharing major progress here on Substack, and cross-posting visuals and builds to:</p><ul><li><p><a href="https://www.instagram.com/dmartintucker/">Instagram</a></p></li><li><p><a href="https://dmartuk.itch.io/">Itch.io</a></p></li><li><p><a href="https://www.linkedin.com/in/dmartintucker/">LinkedIn</a></p></li><li><p><a href="https://dmartuk.com/">Dribbble</a></p></li></ul><h2>Join Me on this Journey</h2><p>If you're curious about language learning, game design, narrative-building, or just want to come along for the ride, I&#8217;d love to have you on board!</p><p>Thanks for reading!</p><p>Made with &#10084; by dmartuk</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dmartuk.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Building 3B - An interactive language-learning adventure! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>