(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"\]; const analyticsIdCookie = "charming\_marketing\_identity\_seen"; const legacyAnalyticsIdCookie = "buildy\_marketing\_identity\_seen"; const analyticsIdCookieMaxAgeSeconds = 31536000; !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) { const hashParams = new URLSearchParams(window.location.hash.substring(1)); const productDistinctId = hashParams.get('distinct\_id'); const productSessionId = hashParams.get('session\_id'); const productBootstrap = productDistinctId && productSessionId ? { distinctID: productDistinctId, sessionID: productSessionId } : null; let markerDistinctId = null; if (!productBootstrap) { const markerIdPattern = /^\[0-9a-f\]{8}-\[0-9a-f\]{4}-\[0-9a-f\]{4}-\[0-9a-f\]{4}-\[0-9a-f\]{12}$/i; var markerUsedLegacy = false; for (const markerName of \[analyticsIdCookie, legacyAnalyticsIdCookie\]) { const markerPrefix = markerName + '='; const markerCookie = document.cookie .split(';') .map(function (part) { return part.trim(); }) .find(function (part) { return part.startsWith(markerPrefix); }); if (!markerCookie) continue; try { const value = decodeURIComponent(markerCookie.slice(markerPrefix.length)); if (markerIdPattern.test(value)) { markerDistinctId = value; markerUsedLegacy = markerName === legacyAnalyticsIdCookie; break; } } catch {} } } const bootstrap = productBootstrap ?? (markerDistinctId ? { distinctID: markerDistinctId } : null); posthog.init(posthogKey, { api\_host: posthogHost, defaults: '2026-01-30', ...(bootstrap ? { bootstrap } : {}), loaded: function (ph) { const distinctId = ph.get\_distinct\_id(); if (typeof distinctId !== 'string') return; if (markerUsedLegacy) { ph.capture('legacy\_state\_key\_observed', { key: legacyAnalyticsIdCookie }); } try { localStorage.setItem(analyticsIdCookie, distinctId); localStorage.removeItem(legacyAnalyticsIdCookie); } catch {} document.cookie = analyticsIdCookie + '=' + encodeURIComponent(distinctId) + '; Path=/; Max-Age=' + analyticsIdCookieMaxAgeSeconds + '; SameSite=Lax' + (window.location.protocol === 'https:' ? '; Secure' : ''); document.cookie = legacyAnalyticsIdCookie + '=; Path=/; Max-Age=0; 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); } })(); (function () { function setThemeColorMetas(theme) { var light = document.querySelector('meta\[data-theme-color="light"\]'); var dark = document.querySelector('meta\[data-theme-color="dark"\]'); if (light) light.setAttribute('media', theme === 'light' ? 'all' : 'not all'); if (dark) dark.setAttribute('media', theme === 'dark' ? 'all' : 'not all'); } try { var stored = localStorage.getItem('charming-theme'); if (stored === 'dark' || stored === 'light') { document.documentElement.setAttribute('data-theme', stored); setThemeColorMetas(stored); } } catch (\_err) { // Storage can be unavailable (private mode, disabled) — fall back to // the media query, same as a first-time visitor. } })(); Charming - A cloud for apps your AI builds.(() => { // Keep this fallback aligned with copyValueToClipboard in ./clipboard.ts. // This script runs before modules load, so it cannot import the shared helper. async function copy(value) { try { if (navigator.clipboard) { await navigator.clipboard.writeText(value); return true; } } catch { // Fall through to the textarea path for browsers that block the async API. } let fallback; try { fallback = document.createElement('textarea'); fallback.value = value; fallback.setAttribute('readonly', ''); fallback.style.position = 'fixed'; fallback.style.top = '-9999px'; document.body.appendChild(fallback); fallback.select(); return document.execCommand('copy'); } catch { return false; } finally { fallback?.remove(); } } const resetTimers = new WeakMap(); function setVisible(element, visible) { element?.classList.replace( visible ? 'opacity-0' : 'opacity-100', visible ? 'opacity-100' : 'opacity-0', ); } function resetFeedback(button, island) { const action = button.querySelector('\[data-copy-action-label\]'); const confirmed = button.querySelector('\[data-copy-confirmed-label\]'); const confirmation = island.querySelector('\[data-copy-confirmation\]'); const liveRegion = island.querySelector('\[data-copy-live-region\]'); setVisible(action, true); setVisible(confirmed, false); setVisible(confirmation, false); confirmation?.classList.replace('translate-y-0', 'translate-y-1'); if (confirmation) { confirmation.textContent = button.dataset.copySuccessMessage ?? ''; if (confirmation.dataset.copyConfirmation === 'false') { confirmation.parentElement?.classList.replace('mt-2.5', 'mt-0'); confirmation.parentElement?.classList.replace('grid-rows-\[1fr\]', 'grid-rows-\[0fr\]'); } } if (liveRegion) liveRegion.textContent = ''; resetTimers.delete(button); } function showFeedback(button, island, copied) { const action = button.querySelector('\[data-copy-action-label\]'); const confirmed = button.querySelector('\[data-copy-confirmed-label\]'); const confirmation = island.querySelector('\[data-copy-confirmation\]'); const liveRegion = island.querySelector('\[data-copy-live-region\]'); const message = copied ? (button.dataset.copySuccessMessage ?? '') : (button.dataset.copyBlockedMessage ?? ''); setVisible(action, !copied); setVisible(confirmed, copied); if (confirmation) { confirmation.textContent = message; const buttonOnlySuccess = copied && confirmation.dataset.copyConfirmation === 'false'; setVisible(confirmation, !buttonOnlySuccess); confirmation.classList.replace( buttonOnlySuccess ? 'translate-y-0' : 'translate-y-1', buttonOnlySuccess ? 'translate-y-1' : 'translate-y-0', ); if (!copied && confirmation.dataset.copyConfirmation === 'false') { confirmation.parentElement?.classList.replace('mt-0', 'mt-2.5'); confirmation.parentElement?.classList.replace('grid-rows-\[0fr\]', 'grid-rows-\[1fr\]'); } } if (liveRegion) liveRegion.textContent = message; const priorTimer = resetTimers.get(button); if (priorTimer) clearTimeout(priorTimer); resetTimers.set( button, setTimeout(() => resetFeedback(button, island), 10000), ); } document.addEventListener( 'click', async (event) => { const target = event.target instanceof Element ? event.target : null; const button = target?.closest('button\[data-copy-value\]'); const island = button?.closest('astro-island\[ssr\]'); if (!button || !island) return; showFeedback(button, island, await copy(button.dataset.copyValue ?? '')); }, true, ); })(); {"@context":"https://schema.org","@graph":\[{"@type":"Organization","@id":"https://usecharming.com/#org","name":"Charming","url":"https://usecharming.com/","logo":"https://usecharming.com/charming-mark.svg","contactPoint":\[{"@type":"ContactPoint","contactType":"customer support","email":"support@usecharming.com","availableLanguage":\["English"\]},{"@type":"ContactPoint","contactType":"legal","email":"legal@usecharming.com","availableLanguage":\["English"\]}\],"address":{"@type":"PostalAddress","addressCountry":"US"},"sameAs":\["https://chatgpt.com/plugins/plugin\_asdk\_app\_6a56c533cd7c8191b9a16cb7973a65e6","https://github.com/tambo-labs/charming-mcp","https://x.com/tambo\_ai"\]},{"@type":"WebSite","@id":"https://usecharming.com/#website","name":"Charming","url":"https://usecharming.com/","publisher":{"@id":"https://usecharming.com/#org"}},{"@type":"SoftwareApplication","@id":"https://usecharming.com/#software","name":"Charming","url":"https://usecharming.com/","applicationCategory":"DeveloperApplication","operatingSystem":"Web","description":"We host the apps you build with ChatGPT, Claude, or another AI. Your apps are private by default, but you can share them like a Google Doc.","installUrl":"https://chatgpt.com/plugins/plugin\_asdk\_app\_6a56c533cd7c8191b9a16cb7973a65e6","sameAs":\["https://chatgpt.com/plugins/plugin\_asdk\_app\_6a56c533cd7c8191b9a16cb7973a65e6"\],"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"publisher":{"@id":"https://usecharming.com/#org"},"audience":{"@type":"Audience","audienceType":"Consumer"}},{"@type":"Service","@id":"https://usecharming.com/#service","name":"Charming app hosting","url":"https://usecharming.com/","provider":{"@id":"https://usecharming.com/#org"},"serviceType":"AI-built web app hosting","areaServed":"Worldwide","audience":{"@type":"Audience","audienceType":"Consumer"},"description":"Charming hosts AI-built web apps with a real URL and a database, so any AI can use and update them anytime.","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"}},{"@type":"BreadcrumbList","@id":"https://usecharming.com/#breadcrumb","itemListElement":\[{"@type":"ListItem","position":1,"name":"Charming","item":"https://usecharming.com/"},{"@type":"ListItem","position":2,"name":"Home","item":"https://usecharming.com/"}\]},{"@type":"FAQPage","@id":"https://usecharming.com/#faq","mainEntity":\[{"@type":"Question","name":"What is Charming?","acceptedAnswer":{"@type":"Answer","text":"Charming turns ideas you describe in chat into real, hosted web apps with their own URL and a database, so any AI can use and update them later."}},{"@type":"Question","name":"How do I build an app with Charming?","acceptedAnswer":{"@type":"Answer","text":"Ask any AI to build it: ChatGPT, Claude, or a coding agent. Charming gives the AI a way to create the app, give it a real URL, and store its data."}},{"@type":"Question","name":"Are my apps still live when I close my laptop?","acceptedAnswer":{"@type":"Answer","text":"Yes. Every app is live from the moment you create it. You don’t need to leave your computer running."}},{"@type":"Question","name":"Can other AIs use a Charming app I created?","acceptedAnswer":{"@type":"Answer","text":"Yes. Every app is accessible over MCP the moment it’s created, with nothing to set up. Any AI that supports MCP, or that can make web requests, can read and update its data."}},{"@type":"Question","name":"How much does Charming cost?","acceptedAnswer":{"@type":"Answer","text":"Charming is free for personal apps. Charming for Work includes single sign-on, roles and permissions, an admin view, white-labeling on your own domain, and more."}}\]},{"@type":"WebPage","@id":"https://usecharming.com/#webpage","url":"https://usecharming.com/","name":"Charming - A cloud for apps your AI builds.","isPartOf":{"@id":"https://usecharming.com/#website"},"about":{"@id":"https://usecharming.com/#software"},"primaryImageOfPage":"https://usecharming.com/og-image.png","speakable":{"@type":"SpeakableSpecification","cssSelector":\["h1","h2","\[data-speakable\]"\]}}\]}

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

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

[Sign up](https://charm.ing/auth/signup)

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

var e=document.querySelector(\`\[data-nav-menu\]\`);e&&(e.querySelectorAll(\`a\`).forEach(t=>{t.addEventListener(\`click\`,()=>{e.open=!1})}),document.addEventListener(\`pointerdown\`,t=>{e.open&&!e.contains(t.target)&&(e.open=!1)}),document.addEventListener(\`keydown\`,t=>{t.key===\`Escape\`&&e.open&&(e.open=!1,e.querySelector(\`summary\`)?.focus())}));

# Build and share apps as easily as _a Google Doc._

Charming is a cloud for the apps your AI builds for you. Your apps are live immediately, private by default, and easy to share.

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)}})();

[Create an app](https://charm.ing/auth/signup)

![](/logos/openclaw.svg)![](/logos/codex.svg)![](/logos/claude-code.png)![](/logos/cursor.svg)Copy promptCopied!

Copied! Now paste it into your favorite AI agent!

Building apps at work? [Charming for Work.](/work)

![](/logos/claude.svg)Claude

build me an app to track my workouts

Done. Your **Workout Tracker** is live. Want me to help you create your next workout plan?

charm.ing/you/workout-trackerLive

Workout TrackerProgressLogPRs

Last workout · Tue

**12**day streak

This week

5

workouts

Volume (lb)

42.3k

8%

Bench PR

175

25 lb

## Build apps with the AI _you already use._

1.  ![](/charming-mark-micro.svg)![](/charming-mark-micro-dark.svg)CharmingConnected
    
    Web search
    
    Ask anything
    
    ### Connects to your existing AI
    
    Use the context and tokens from your existing ChatGPT, Claude or another agent subscription.
    
2.  Create an app on Charming to split trip costs.
    
    TTrip Split
    
    Rail passes**$210**
    
    Ryokan · 2 nights**$168**
    
    Sam owes you**$96**
    
    Live
    
    ### Tell your agent to build an app
    
    Your agent writes the code and sends it to host on Charming instantly.
    
3.  Share Trip SplitPrivate
    
    charm.ing/you/trip-split
    
    SDInvite
    
    ### Use your app
    
    Your app lives at its own link. It’s private by default, but shareable when you are ready.
    

Works with

![](/logos/chatgpt.svg)ChatGPT![](/logos/claude.svg)Claude![](/logos/claude-code.png)Claude Code![](/logos/cursor.svg)Cursor![](/logos/codex.svg)Codex![](/logos/gemini.svg)Gemini![](/logos/grok.svg)Grok![](/logos/perplexity.svg)Perplexity![](/logos/openclaw.svg)OpenClaw![](/logos/goose.png)Goose

## Your apps also live _inside the chat._

In AI chats that support MCP apps, just ask for one of your apps and it opens right in the conversation.

[![](/logos/chatgpt.svg)Try it in ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6a56c533cd7c8191b9a16cb7973a65e6)

![](/logos/chatgpt.svg)ChatGPTToday

You

what should I build?

Remembering…

Based on your recent chats about a **home remodel**, here’s a budget app.

charm.ing/you/reno-budget

RReno BudgetBudgetRooms

Total budget

$24,800

Spent

$18,650

Remaining

$6,150

75% of budget spent$6,150 left

Kitchen remodelKitchen$24,800

Contractor estimateLabor$18,650

Add itemUpdated today

+Ask ChatGPT

## You or your agent can _use your apps._

Apps get a visual interface for you and an agent interface (MCP), so your agent can use it easily, as you can.

Run LogLive

July so far15.5 mi

Best pace · 9:41/mi

Today3.2 mi9:41/mi

Jul 65.0 mi9:58/mi

Jul 43.1 mi9:47/mi

Add entryJul 2Jul 4Jul 6Today

Your chatToday

log today’s run: 3.2 miles in 30:59

Read

Saved to your **Run Log**:Today3.2 mi9:41/mi

what was my pace on my last run?

**9:41/mi**, over 3.2 miles.

Write a message…

## Share your app with _anyone._

Your apps are private by default, but easy to share like a Google Doc. Send an invite and start collaborating with anyone.

KKyoto TripItineraryMapBudgetShare

4 days · Kyoto · NaraYSD3 people planning

Sat · Oct 12

Land KIX, train to Kyoto Station

Check in at Gion ryokan

![](/logos/claude.svg)**You** · Claude

Sun · Oct 13

Fushimi Inari at sunrise

SNishiki Market lunch, the uni stall

![](/logos/chatgpt.svg)**Sam** · ChatGPT

Mon · Oct 14

Arashiyama bamboo grove + monkey park

DRiverside teahouse after the monkey park

**Dana** · Just the app

Tue · Oct 15

Day trip: Nara deer park

Deer crackers, Tōdai-ji, back by dinner

YYou![](/logos/claude.svg)Claude

SSam![](/logos/chatgpt.svg)ChatGPT

DDanaJust the app

## Check out a template someone _built with Charming._

Make a copy that you can customize with your agent.

[HHydrationTodayHistory6/ 8 cups9-day streak48 oz today · 2 cups to goYesterday8 / 8Sunday7 / 8Saturday8 / 8**Hydration.** Track water against a daily goal.learn more →](/apps/hydration)[MMealsTodayWeek_M__T__W__T__F__S__S_P 128gC 210gF 62gToday1,840 _/ 2,200 kcal_Greek yogurt + granola410Chicken burrito bowl720Salmon + rice710**Meals.** Log meals; your agent fills in the calories.learn more →](/apps/meals)[FFlashcardsReviewDecksla madrugadathe early morning · 12 due todayel atardecerdue nextla sobremesain 2 daysSpanish · B1 mastery68%**Flashcards.** Spaced-repetition decks your agent fills in bulk.learn more →](/apps/flashcards)[WWatchlistSeenQueuePLPast Lives★★★★★DPDune: Part Two★★★★★AAftersun★★★★★ZIThe Zone of InterestQueued**Watchlist.** What you’ve seen and want to see, with your ratings.learn more →](/apps/watchlist)[SSplitReceiptPeopleCasa Bonita · Jul 5$86.40Carnitas tacos_S_Sam$18.00Margarita pitcher×4$32.00Churros_A_Alex$9.60Guac + chips×4$12.80you’re owed **$34.20** of $86.40**Split.** Your agent reads the receipt, then you assign the items.learn more →](/apps/split)[LLiftLogPRsDeadlift · 3×5PR315 lbSquat · 5×5245 lbBench · 3×8185 lb**Weekly volume**↑ 12%_W1__W2__W3__W4__W5__W6_**Lift.** Log lifts, sets, reps, and weekly volume.learn more →](/apps/lift)

## Free for _personal apps._

When you need more than what personal offers, contact us about a business plan.

Personal

Free

What’s included

*   Unlimited apps
*   Hosted at charm.ing/you
*   Share & copy
*   Works in Claude, ChatGPT & more

[Fair use applies](/fair-use)

[Create an app](https://charm.ing/auth/signup)

![](/logos/openclaw.svg)![](/logos/codex.svg)![](/logos/claude-code.png)![](/logos/cursor.svg)Copy promptCopied!

Copied! Now paste it into your favorite AI agent!

Work

Contact Us

What’s included

*   Single sign-on
*   Roles and permissions on every app
*   Visibility into every app your team builds
*   White-label on your own domain

[See Charming for Work](/work)

## Frequently Asked _Questions._

What is Charming?+–

Charming is the cloud for apps your AI builds. It handles the hosting, data, and sharing.

Do I need to be technical?+–

No. Tell your AI what you want, and it writes the code while Charming handles the hosting.

Does it work with my AI?+–

Yes. Charming works with ChatGPT, Claude, Cursor, Codex, and many other agents. See our docs for the full list we’ve tested.

Can other AIs use a Charming app I created?+–

Yes. Every app is accessible over MCP the moment it’s created, with nothing to set up. Any AI that supports MCP, or that can make web requests, can read and update its data.

Can I control who sees my app?+–

Yes. Your apps are private by default. Invite people with different access levels or make an app public.

Are my apps still live when I close my laptop?+–

Yes. Every app is live from the moment you create it. You don’t need to leave your computer running.

How much does it cost?+–

Charming is free for personal apps. For business features, contact us about [Charming for Work](/work). It includes single sign-on, roles and permissions, an admin view, white-labeling on your own domain, and more.

## The missing cloud for apps _your agent builds._

Build and share your first app in a few minutes.

(()=>{var a=(s,i,o)=>{let r=async()=>{await(await s())()},t=typeof i.value=="object"?i.value:void 0,c={rootMargin:t==null?void 0:t.rootMargin},n=new IntersectionObserver(e=>{for(let l of e)if(l.isIntersecting){n.disconnect(),r();break}},c);for(let e of o.children)n.observe(e)};(self.Astro||(self.Astro={})).visible=a;window.dispatchEvent(new Event("astro:visible"));})();

[Create an app](https://charm.ing/auth/signup)

![](/logos/openclaw.svg)![](/logos/codex.svg)![](/logos/claude-code.png)![](/logos/cursor.svg)Copy promptCopied!

Copied! Now paste it into your favorite AI agent!

[](/)

Software that’s finally yours.

[Up and running](https://status.usecharming.com "System status. Opens status.usecharming.com")

## Explore

*   [Ideas](/#apps)
*   [How it works](/how-it-works)
*   [Pricing](/#pricing)
*   [For Work](/work)
*   [Blog](/blog)

## For work

*   [Finance](/work/finance)
*   [Internal tools](/work/internal-tools)
*   [Recruiting](/work/recruiting)
*   [Consultants](/work/consultants)
*   [Marketing](/work/marketing)

## Works with

*   [ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6a56c533cd7c8191b9a16cb7973a65e6)
*   [Claude](https://charm.ing/docs/clients/claude)
*   [Microsoft 365 Copilot](https://charm.ing/docs/clients/microsoft-365-copilot)
*   [Cursor](https://charm.ing/docs/clients/cursor)
*   [All setup guides](/works-with)

## Learn

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

Explore+

*   [Ideas](/#apps)
*   [How it works](/how-it-works)
*   [Pricing](/#pricing)
*   [For Work](/work)
*   [Blog](/blog)

For work+

*   [Finance](/work/finance)
*   [Internal tools](/work/internal-tools)
*   [Recruiting](/work/recruiting)
*   [Consultants](/work/consultants)
*   [Marketing](/work/marketing)

App ideas+

*   [Job application tracker](/apps/job-application-tracker)
*   [Project status](/apps/project-status-tracker)
*   [Meeting actions](/apps/meeting-action-tracker)
*   [Vendor review](/apps/vendor-review)
*   [Product launch](/apps/product-launch-tracker)
*   [Review and approval](/apps/review-approval)
*   [Quote calculator](/apps/pricing-calculator)

Works with+

*   [ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6a56c533cd7c8191b9a16cb7973a65e6)
*   [Claude](https://charm.ing/docs/clients/claude)
*   [Microsoft 365 Copilot](https://charm.ing/docs/clients/microsoft-365-copilot)
*   [Cursor](https://charm.ing/docs/clients/cursor)
*   [All setup guides](/works-with)

Learn+

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

## App ideas

[Job application tracker](/apps/job-application-tracker)[Project status](/apps/project-status-tracker)[Meeting actions](/apps/meeting-action-tracker)[Vendor review](/apps/vendor-review)[Product launch](/apps/product-launch-tracker)[Review and approval](/apps/review-approval)[Quote calculator](/apps/pricing-calculator)

© 2026 Charming

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

charm.ing

var e=document.documentElement,t=window.matchMedia(\`(prefers-color-scheme: dark)\`),n=()=>{let n=e.getAttribute(\`data-theme\`);return n===\`light\`||n===\`dark\`?n:t.matches?\`dark\`:\`light\`},r=document.querySelector(\`\[data-theme-toggle\]\`),i=()=>{if(!r)return;let e=n()===\`dark\`?\`light\`:\`dark\`;r.setAttribute(\`aria-label\`,\`Switch to ${e} theme\`)};i();var a=e=>{let t=document.querySelector(\`meta\[data-theme-color="light"\]\`),n=document.querySelector(\`meta\[data-theme-color="dark"\]\`);t?.setAttribute(\`media\`,e===\`light\`?\`all\`:\`not all\`),n?.setAttribute(\`media\`,e===\`dark\`?\`all\`:\`not all\`)};r?.addEventListener(\`click\`,()=>{let t=n()===\`dark\`?\`light\`:\`dark\`;e.setAttribute(\`data-theme\`,t),a(t);try{localStorage.setItem(\`charming-theme\`,t)}catch{}i()}),t.addEventListener(\`change\`,()=>{e.hasAttribute(\`data-theme\`)||i()});