(function(){const posthogKey = "phc\_oMfVwfGjzwkE5n7cCaDf25rTm7WaYn8rH4FnvsVq57Zb"; const posthogHost = "https://i.buildy.so"; const forceAnalytics = false; const analyticsHosts = \["buildy.so","www.buildy.so","usecharming.com","www.usecharming.com"\]; !function(t,e){var o,n,p,r;e.\_\_SV||(window.posthog && window.posthog.\_\_loaded)||(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 os ds Ie us vs ss ls capture calculateEventProperties register register\_once register\_for\_session unregister unregister\_for\_session ws getFeatureFlag getFeatureFlagPayload getFeatureFlagResult isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync 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 startExceptionAutocapture stopExceptionAutocapture loadToolbar get\_property getSessionProperty bs ps createPersonProfile setInternalOrTestUser ys es $s opt\_in\_capturing opt\_out\_capturing has\_opted\_in\_capturing has\_opted\_out\_capturing get\_explicit\_consent\_status is\_capturing clear\_opt\_in\_out\_capturing cs debug M gs getPageViewId captureTraceFeedback captureTraceMetric Qr".split(" "),n=0;n<o.length;n++)g(u,o\[n\]);e.\_i.push(\[i,s,a\])},e.\_\_SV=1)}(document,window.posthog||\[\]); var h = window.location.hostname; if (forceAnalytics || analyticsHosts.indexOf(h) !== -1) { posthog.init(posthogKey, { api\_host: posthogHost, defaults: '2026-01-30', loaded: function (ph) { const distinctId = ph.get\_distinct\_id(); if (typeof distinctId !== 'string') return; try { localStorage.setItem('buildy\_marketing\_identity\_seen', distinctId); } catch {} document.cookie = 'buildy\_marketing\_identity\_seen=' + encodeURIComponent(distinctId) + '; Path=/; Max-Age=31536000; SameSite=Lax' + (window.location.protocol === 'https:' ? '; Secure' : ''); }, }); } })();(function(){const ga4Id = "G-XG5Q0M59CD"; const forceAnalytics = false; const analyticsHosts = \["buildy.so","www.buildy.so","usecharming.com","www.usecharming.com"\]; var h = window.location.hostname; if (forceAnalytics || analyticsHosts.indexOf(h) !== -1) { window.dataLayer = window.dataLayer || \[\]; function gtag() { window.dataLayer.push(arguments); } window.gtag = gtag; gtag('consent', 'default', { ad\_storage: 'denied', ad\_user\_data: 'denied', ad\_personalization: 'denied', analytics\_storage: 'granted', }); gtag('js', new Date()); gtag('config', ga4Id); var s = document.createElement('script'); s.async = true; s.src = 'https://www.googletagmanager.com/gtag/js?id=' + ga4Id; document.head.appendChild(s); } })();The Daily Charmer | Charming@media (prefers-reduced-motion:no-preference){.journal-page\[data-astro-cid-x255k2k2\]>\[data-astro-cid-x255k2k2\]{animation:.42s ease-out both journal-enter}.journal-page\[data-astro-cid-x255k2k2\]>\[data-astro-cid-x255k2k2\]:nth-child(2){animation-delay:70ms}}@keyframes journal-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}} @media print{body{font-size:11pt;color:#000!important;background:#fff!important}a\[data-astro-cid-m66uj5id\]{text-decoration:underline;color:#000!important}.no-print\[data-astro-cid-m66uj5id\]{display:none!important}main\[data-astro-cid-m66uj5id\]{max-width:100%!important;padding:0!important}h1\[data-astro-cid-m66uj5id\]{page-break-before:avoid}h2\[data-astro-cid-m66uj5id\],h3\[data-astro-cid-m66uj5id\]{page-break-after:avoid}p\[data-astro-cid-m66uj5id\],ul\[data-astro-cid-m66uj5id\],ol\[data-astro-cid-m66uj5id\],pre\[data-astro-cid-m66uj5id\],blockquote\[data-astro-cid-m66uj5id\]{page-break-inside:avoid}}.blog-prose{color:var(--color-ink-light);font-size:1.125rem;line-height:1.8}.blog-prose>\*+\*{margin-top:1.5rem}.blog-prose h2,.blog-prose h3{color:var(--color-ink);letter-spacing:-.02em;font-weight:600;line-height:1.2}.blog-prose h2{margin-top:3.5rem;font-size:1.75rem}.blog-prose h3{margin-top:2.5rem;font-size:1.35rem}.blog-prose a{color:var(--color-ink);text-decoration:underline;text-decoration-color:var(--color-ink-lighter);text-underline-offset:.2em}.blog-prose ul,.blog-prose ol{padding-left:1.4rem}.blog-prose ul{list-style:outside}.blog-prose ol{list-style:decimal}.blog-prose li+li{margin-top:.5rem}.blog-prose blockquote{border-left:2px solid var(--color-rule);color:var(--color-ink-lighter);padding-left:1.25rem;font-style:italic}.blog-prose pre{border:1px solid var(--color-rule);background:var(--color-muted);padding:1rem;font-size:.85rem;line-height:1.6;overflow-x:auto}.blog-prose :not(pre)>code{background:var(--color-muted);padding:.12em .3em;font-size:.88em}.blog-prose img,.blog-prose iframe,.blog-prose video{border:1px solid var(--color-rule);width:100%}.blog-prose figure{margin-top:2.5rem}.blog-prose .brand-comparison{border:1px solid var(--color-rule);background:var(--color-rule);grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.blog-prose .brand-comparison\_\_item{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:18rem;padding:2.5rem;display:flex}.blog-prose .brand-comparison\_\_item--old{color:var(--color-ink);background:#fff}.blog-prose .brand-comparison\_\_item--new{color:var(--color-ink);background:#f7f7f5}.blog-prose .brand-comparison\_\_item img{object-fit:contain;border:0;width:auto;height:10rem}.blog-prose .brand-comparison\_\_item span{letter-spacing:.12em;text-transform:uppercase;font-family:IBM Plex Mono,monospace;font-size:.75rem;line-height:1}.blog-prose .brand-comparison figcaption{background:#fff;grid-column:1/-1;margin:0;padding:.75rem 1rem}.blog-prose .launch-video{margin-top:0;margin-bottom:3rem}.blog-prose figcaption{color:var(--color-ink-lighter);margin-top:.75rem;font-family:IBM Plex Mono,monospace;font-size:.75rem;line-height:1.6}@media (width<=639px){.blog-prose .brand-comparison{grid-template-columns:1fr}.blog-prose .brand-comparison\_\_item{min-height:14rem;padding:2rem}.blog-prose .brand-comparison\_\_item img{height:8rem}.blog-prose .brand-comparison figcaption{grid-column:auto}}

[![](/charming-mark.svg)charming](/)

[Ideas](/#apps)[Pricing](/#pricing)[For Work](/work/)[Blog](/blog/)[Docs](/docs/)

[Sign up / Login](https://charm.ing/auth/login)Menu

[Ideas](/#apps)[Pricing](/#pricing)[For Work](/work/)[Blog](/blog/)[Docs](/docs/)[Sign up / Login](https://charm.ing/auth/login)

# The Daily Charmer

Personal software news, Charming updates, and notes from the people building it.

July 21, 2026·By Akhilesh Rangani

## [How to host an app built with Claude→](/blog/how-to-host-an-app-built-with-claude)

Claude builds an app inside a chat, but it vanishes when you close the tab. Publish it through Charming and it gets its own URL and a real database.

[![](/blog/host-app-built-with-claude/cover.png)](/blog/how-to-host-an-app-built-with-claude)

## More stories

1.  [
    
    July 16, 2026
    
    ![](/blog/why-buildy-became-charming-cover.png)
    
    ### What I learned from branding an app
    
    How we chose the name Charming and our new logo.
    
    →](/blog/why-buildy-became-charming)
    

Get The Daily Charmer by email.

astro-island,astro-slot,astro-static-slot{display:contents}(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();(()=>{var g=Object.defineProperty;var w=(a,s,c)=>s in a?g(a,s,{enumerable:!0,configurable:!0,writable:!0,value:c}):a\[s\]=c;var l=(a,s,c)=>w(a,typeof s!="symbol"?s+"":s,c);var E=new Set(\["\_\_proto\_\_","constructor","prototype"\]);{let a={0:t=>y(t),1:t=>c(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(c(t)),5:t=>new Set(c(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE\_INFINITY\*t},s=t=>{let\[p,e\]=t;return p in a?a\[p\](e):void 0},c=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map((\[p,e\])=>\[p,s(e)\]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island\[ssr\]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let r=this.querySelectorAll("astro-slot"),n={},d=this.querySelectorAll("template\[data-astro-template\]");for(let o of d){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n\[o.getAttribute("data-astro-template")||"default"\]=o.innerHTML,o.remove())}for(let o of r){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n\[o.getAttribute("name")||"default"\]=o.innerHTML)}let u;try{u=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let i=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(i+=\` (export ${v})\`),console.error(\`\[hydrate\] Error parsing props for component ${i}\`,this.getAttribute("props"),o),o}let h;await this.hydrator(this)(this.Component,u,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT\_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let r=new URL(e,document.baseURI);return r.searchParams.set("astro-retry",Date.now().toString()),r.toString()}async importWithRetry(e){try{return await import(e)}catch(r){return await new Promise(n=>setTimeout(n,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let r=this.getAttribute("component-url"),n=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:r}});this.dispatchEvent(n)&&console.error(\`\[astro-island\] Error hydrating ${r}\`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),r=this.getAttribute("client");if(Astro\[r\]===void 0){window.addEventListener(\`astro:${r}\`,()=>this.start(),{once:!0});return}try{await Astro\[r\](async()=>{let n=this.getAttribute("renderer-url");try{let\[d,{default:u}\]=await Promise.all(\[this.importWithRetry(this.getAttribute("component-url")),n?this.importWithRetry(n):Promise.resolve({default:()=>()=>{}})\]),h=this.getAttribute("component-export")||"default";if(h.includes(".")){this.Component=d;for(let m of h.split(".")){if(E.has(m)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,m))throw new Error(\`Invalid component export path: ${h}\`);this.Component=this.Component\[m\]}}else{if(E.has(h))throw new Error(\`Invalid component export path: ${h}\`);this.Component=d\[h\]}return this.hydrator=u,this.hydrate}catch(d){return this.handleHydrationError(d),()=>{}}},e,this)}catch(n){this.handleHydrationError(n)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",\["props"\]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();

Email addressSubscribe

Occasional emails from Charming. Unsubscribe anytime.

[Create an app with Charming →](/)

[![Charming](/charming-lockup.svg)](/)

Software that's finally yours.

[Operational](https://status.buildy.so "System status. Opens status.buildy.so")

© 2026 Charming

## Product

*   [Overview](/)
*   [Pricing](/#pricing)
*   [For Work](/work/)
*   [Blog](/blog/)

## Works with

*   [ChatGPT](https://chatgpt.com/apps/buildy/asdk_app_69f9215e800881919f3d96d79200a35a)
*   [Claude](/setup/claude/)
*   [Gemini](/setup/gemini/)
*   [Grok](/setup/grok/)
*   [Perplexity](/setup/perplexity/)

## Resources

*   [Docs](/docs/)
*   [Guides](/guides/)
*   [Contact](/contact-us/)
*   [llms.txt](/llms.txt)
*   [Email us](mailto:support@usecharming.com)

## Legal

*   [Privacy](/privacy/)
*   [Terms](/terms/)
*   [Fair use](/fair-use/)
*   [Subprocessors](/subprocessors/)