<?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"><channel><title><![CDATA[John at Uppcoder]]></title><description><![CDATA[John at Uppcoder]]></description><link>https://johnuppcoder.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 31 Oct 2026 17:29:06 GMT</lastBuildDate><atom:link href="https://johnuppcoder.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I asked an AI builder for a Django app. Here is what it got right, and what it took.]]></title><description><![CDATA[I work on Uppcoder, so take this as a report from someone with a stake in it. I wanted to see how our AI builder handles Django, with a small app I…]]></description><link>https://johnuppcoder.hashnode.dev/i-asked-an-ai-builder-for-a-django-app-here-is-what-it-got-right-and-what-it-took</link><guid isPermaLink="true">https://johnuppcoder.hashnode.dev/i-asked-an-ai-builder-for-a-django-app-here-is-what-it-got-right-and-what-it-took</guid><dc:creator><![CDATA[John Bannister]]></dc:creator><pubDate>Wed, 28 Oct 2026 15:45:53 GMT</pubDate><content:encoded><![CDATA[<p>I work on Uppcoder, so take this as a report from someone with a stake in it. I wanted to see how our AI builder handles Django, with a small app I actually wanted: something that tells me which of my projects still run a supported Django version.</p>
<p><strong>The prompt</strong></p>
<p>One paragraph: projects with a name and a Django version, releases with their end of support dates managed in the admin, a front page that says supported or not, days left and what to upgrade to, and a light and a dark mode. I pasted the release table from <a href="http://djangoproject.com/download">djangoproject.com/download</a> at the end, because I did not want the dates coming from the AI's memory. Some of those dates are only a month ("April 2028"), and I asked for them to stay that way.</p>
<p><strong>What came back, 7 minutes later</strong></p>
<p>It started from our Django + PostgreSQL starter and the preview showed the app as it went. The first version took 7 minutes and 57 steps, on the free AI. It cost 32 cents.</p>
<img src="https://cdn-images-1.medium.com/v2/resize:fit:1600/1*Dq9Z8D2pOlcL7SNr_tbZrA.png" alt="The AI builder building the app, with the live preview on the right" style="display:block;margin:0 auto" />

<ul>
<li>A tracker app with real models, migrations and a data migration for the eight releases, seeded exactly as given.</li>
<li>A small model field for dates that are only known to the month, shown as "April 2028".</li>
<li>Releases in the Django admin, with list columns.</li>
<li>It tested its own work with Django's test client: added projects, edited and deleted them, checked the numbers, then removed its test data so the app started empty.</li>
<li>It listed the assumptions it made and had not checked with me. For a month-only end date it counts days left to the 1st of the month, the cautious reading.</li>
</ul>
<p>A second prompt added a login for changes and a box on the front page where anyone can check a version without saving anything.</p>
<p><strong>After the AI</strong></p>
<img src="https://cdn-images-1.medium.com/v2/resize:fit:1600/1*At5NxMEfxE33g3OHVuCMXA.png" alt="VS Code in the browser, with the AI in the side panel" style="display:block;margin:0 auto" />

<p>The app is a normal Django project, so I carried on by hand. VS Code runs in the browser next to it, with a terminal in the same container and PostgreSQL already connected, so there was nothing to set up. The AI is in the editor too, if you want it. If you prefer your own editor, the same app is reachable over SSH (VS Code Remote, Cursor, JetBrains Gateway or Zed).</p>
<p>It runs on the free plan: one app with one database, its own HTTPS address, no card. The free plan has no time limit, and the app and its database are backed up every night to a separate server.</p>
<p><strong>Rough edges</strong></p>
<p>The first request to the model took about five minutes to start answering, which looked like a hang. The free AI is 50 cents a day, so a second build of this size on the same day runs out halfway. And the builder's preview was blank for Django at first, because Django forbids being shown in a frame by default; we fixed that in the starter.</p>
<p><strong>Try it</strong></p>
<img src="https://cdn-images-1.medium.com/v2/resize:fit:1600/1*-I57z7Y3XxFo9yDObxgnGw.png" alt="The finished app, light and dark" style="display:block;margin:0 auto" />

<p>The tracker: <a href="https://ghoo8qe3-django-django-support-track.apps-2.websson.cloud/?utm_source=hashnode&amp;utm_medium=blog&amp;utm_campaign=posts&amp;utm_content=post-183">https://ghoo8qe3-django-django-support-track.apps-2.websson.cloud/?utm_source=hashnode&amp;utm_medium=blog&amp;utm_campaign=posts&amp;utm_content=post-183</a> (type your version in the box). The builder: <a href="https://portal.uppcoder.com/ai-builder?utm_source=hashnode&amp;utm_medium=blog&amp;utm_campaign=posts&amp;utm_content=post-183">https://portal.uppcoder.com/ai-builder?utm_source=hashnode&amp;utm_medium=blog&amp;utm_campaign=posts&amp;utm_content=post-183</a></p>
<p>If you have an opinion on counting month-only end of support dates to the start or the end of the month, I would like to hear it.</p>
]]></content:encoded></item><item><title><![CDATA[Deploy a Django app with PostgreSQL for free, with VS Code in the browser]]></title><description><![CDATA[Put a Django app online with its own HTTPS address and PostgreSQL: DATABASES from the environment, CSRF_TRUSTED_ORIGINS and the admin user. Free plan.]]></description><link>https://johnuppcoder.hashnode.dev/deploy-a-django-app-with-postgresql-for-free-with-vs-code-in-the-browser</link><guid isPermaLink="true">https://johnuppcoder.hashnode.dev/deploy-a-django-app-with-postgresql-for-free-with-vs-code-in-the-browser</guid><category><![CDATA[Django]]></category><category><![CDATA[Python]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[John Bannister]]></dc:creator><pubDate>Mon, 19 Oct 2026 10:19:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ad5eb6036902187553e4b6a/fa06af67-0db5-4a53-bf06-14642154df0f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You have a Django project and you want it online: its own address, a real PostgreSQL database, and somewhere to keep working on it. This walks through doing that on <a href="https://portal.uppcoder.com/developers">Uppcoder</a> on the free plan, start to finish, with the database connected and the admin login working from the start.</p>
<p>Every step below was run on a fresh app while writing this, and the screenshots are from that run.</p>
<h2>What you get on the free plan</h2>
<p>The free plan (Spark) gives you one app with one database: 2 GB of memory and 2 GB of disk, VS Code in the browser and a terminal in the same container, and an HTTPS address from the first minute. No card needed.</p>
<p>Update, 25 October 2026: the free plan has no time limit (if it is ever changed or ended, everyone on it is told by email at least 60 days before), and every app and database on Uppcoder, the free plan included, is backed up every night to a separate server.</p>
<h2>1. Sign up and take the free plan</h2>
<p>Sign up at <a href="https://portal.uppcoder.com/developers">portal.uppcoder.com</a> and <strong>click the link in the confirmation email first</strong>: the free plan starts only once your address is confirmed. Then go to <strong>Billing → Available Plans → Spark → Start free</strong>.</p>
<h2>2. Create the app: Django and PostgreSQL</h2>
<p><strong>Stacks → + Create → Blank stack</strong>, then type "django" in the search box on the right and pick <strong>Django</strong>. Search again for <strong>PostgreSQL</strong> and add it: it is connected to your Django app automatically.</p>
<img src="https://portal.uppcoder.com/guides/django/01-search-django.jpg" alt="Searching the catalogue for Django" style="display:block;margin:0 auto" />

<p>Give the app a name at the top (mine is <code>polls</code>). The yellow bar tells you what is still missing.</p>
<img src="https://portal.uppcoder.com/guides/django/02-stack-parts.jpg" alt="The stack: Django as the main app, connected to PostgreSQL 16" style="display:block;margin:0 auto" />

<p>Click <strong>Django</strong> to fill in an admin username, password and email. <strong>VS Code, Terminal, Files and SSH</strong> are ticked by default: they run in the same container as your app. Leave <strong>Open to the internet</strong> off for now; the app is then private to you until you switch it on.</p>
<p>Under <strong>Database</strong>, leave <strong>Connect the app to PostgreSQL 16</strong> ticked: Uppcoder then connects your app to the database for you (step 4). Untick it if you would rather develop on Django's default database first and connect it yourself later.</p>
<img src="https://portal.uppcoder.com/guides/django/03-django-settings.jpg" alt="Django's settings: the admin user, the tools that come with it, the database box and an optional Git repository" style="display:block;margin:0 auto" />

<p>Click <strong>PostgreSQL 16</strong> and give it a username and password. The database name is filled in for you.</p>
<img src="https://portal.uppcoder.com/guides/django/04-postgres-settings.jpg" alt="PostgreSQL's settings" style="display:block;margin:0 auto" />

<h2>3. Deploy</h2>
<p>Press <strong>Deploy</strong>, check the summary, then <strong>Confirm and deploy</strong>. Mine was live in 33 seconds.</p>
<img src="https://portal.uppcoder.com/guides/django/05-review.jpg" alt="What will be built" style="display:block;margin:0 auto" />

<img src="https://portal.uppcoder.com/guides/django/06-deploying.jpg" alt="Each part is started and checked" style="display:block;margin:0 auto" />

<p>The stack page has everything in one place: the app's address (the arrow next to its name), VS Code, the Web Terminal, and the database.</p>
<img src="https://portal.uppcoder.com/guides/django/07-stack-page.jpg" alt="The stack page" style="display:block;margin:0 auto" />

<p>Open the address and you get Django's welcome page.</p>
<img src="https://portal.uppcoder.com/guides/django/09-django-welcome.jpg" alt="Django is running" style="display:block;margin:0 auto" />

<h2>4. Your app is already on PostgreSQL</h2>
<p>With <strong>Connect the app to PostgreSQL 16</strong> ticked, Uppcoder finishes the setup about half a minute after the deploy: it installs the PostgreSQL driver (<code>psycopg</code>), points <code>DATABASES</code> in <code>mysite/settings.py</code> at the database, runs <code>migrate</code>, creates the admin user from the username and password you typed, and adds your app's own address to <code>CSRF_TRUSTED_ORIGINS</code> so Django's forms work behind HTTPS.</p>
<p>Open <strong>VS Code</strong> from the stack page and you will find this in <code>mysite/settings.py</code>:</p>
<pre><code class="language-python">DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ['POSTGRES_DB'],
        'USER': os.environ['POSTGRES_USER'],
        'PASSWORD': os.environ['POSTGRES_PASSWORD'],
        'HOST': os.environ['POSTGRES_HOST'],
        'PORT': os.environ.get('POSTGRES_PORT', '5432'),
    }
}

CSRF_TRUSTED_ORIGINS = [os.environ['UPPCODER_SELF_URL']] if os.environ.get('UPPCODER_SELF_URL') else []
</code></pre>
<p>The values come from your app's environment, so no password sits in your code. The same details are under <strong>Connection details</strong> on the stack page (the password stays hidden until you click the eye):</p>
<img src="https://portal.uppcoder.com/guides/django/08-connection-details.jpg" alt="Connection details for the database" style="display:block;margin:0 auto" />

<p>Open <code>/admin/</code> on your app's address and sign in with the admin username and password you chose:</p>
<img src="https://portal.uppcoder.com/guides/django/10-admin.jpg" alt="The Django admin, signed in, running on PostgreSQL" style="display:block;margin:0 auto" />

<h3>If you unticked the box</h3>
<p>Your app starts on Django's default database and the PostgreSQL driver is already installed, so connecting later takes two steps: put the <code>DATABASES</code> block above into <code>settings.py</code>, then in the <strong>Web Terminal</strong>:</p>
<pre><code class="language-bash">pixi run -e web-django python manage.py migrate
pixi run -e web-django python manage.py createsuperuser --noinput
</code></pre>
<p><code>createsuperuser --noinput</code> uses the admin username, password and email you typed when you created the app. The app reloads by itself when <code>settings.py</code> changes; if a typo stops it, fix the file and press <strong>Restart</strong> on the stack page.</p>
<h2>5. Bring your own code</h2>
<p>On the stack page, Django's card has <strong>No repository → Connect</strong>: paste your repository's https address (GitHub, GitLab, Bitbucket or any other git host), pick the branch, and add an access token if it is private. It is cloned into the app and the app restarts on it; <strong>Pull</strong> brings in new commits later. You can also paste the repository when you create the app, under <strong>Source code</strong>.</p>
<p>Uppcoder leaves your own code as it is, so give your project the same two settings as above (the <code>DATABASES</code> block and the <code>CSRF_TRUSTED_ORIGINS</code> line; the variables are there for your app too), list <code>psycopg</code> in its dependencies, and run <code>migrate</code> once in the Web Terminal.</p>
<h2>6. Share it</h2>
<p>When you want other people to see it, switch <strong>Private</strong> to <strong>Public</strong> at the top of the stack page. It changes at once, with no restart, and anyone with the link can open your app. VS Code, the terminal and your files always stay behind your login.</p>
<p>Prefer your own editor? The stack page also shows how to connect over SSH, from VS Code Remote, Cursor, JetBrains Gateway or Zed.</p>
<hr />
<p><em>Uppcoder runs Django and many other frameworks (FastAPI, py4web, Node, React, Vue, Next.js, Laravel, Rails, WordPress and more) the same way:</em> <a href="https://portal.uppcoder.com/developers"><em>try it on the free plan</em></a><em>. Disclosure: I work on Uppcoder.</em></p>
]]></content:encoded></item></channel></rss>