<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jai Thakur</title>
    <description>The latest articles on DEV Community by Jai Thakur (@6edroid).</description>
    <link>https://dev.to/6edroid</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4020502%2F26527dec-21f6-4afd-a184-3231c139b915.png</url>
      <title>DEV Community: Jai Thakur</title>
      <link>https://dev.to/6edroid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/6edroid"/>
    <language>en</language>
    <item>
      <title>I tried to build a DNA-inspired database. I accidentally made a Postgres index checker.</title>
      <dc:creator>Jai Thakur</dc:creator>
      <pubDate>Fri, 17 Jul 2026 03:42:48 +0000</pubDate>
      <link>https://dev.to/6edroid/i-tried-to-build-a-dna-inspired-database-i-accidentally-made-a-postgres-index-checker-3k05</link>
      <guid>https://dev.to/6edroid/i-tried-to-build-a-dna-inspired-database-i-accidentally-made-a-postgres-index-checker-3k05</guid>
      <description>&lt;p&gt;This project was supposed to be a quick experiment.&lt;/p&gt;

&lt;p&gt;I had been reading about DNA storage and got carried away with the idea. DNA can pack a ridiculous&lt;br&gt;
amount of information into a tiny space. I started wondering if a database could behave a bit like&lt;br&gt;
a living system: the schema as its basic code, the queries as signals, and indexes changing as the&lt;br&gt;
workload changed.&lt;/p&gt;

&lt;p&gt;I spent two or three days building around that idea.&lt;/p&gt;

&lt;p&gt;Then I had to admit something fairly obvious. Most of what I was reading described DNA as&lt;br&gt;
&lt;a href="https://www.nature.com/articles/s41576-019-0125-3" rel="noopener noreferrer"&gt;an archival medium&lt;/a&gt;. It involves writing and&lt;br&gt;
reading physical DNA. That is nowhere near the speed or simplicity needed by a normal application&lt;br&gt;
database.&lt;/p&gt;

&lt;p&gt;Also, I am not a PostgreSQL expert. I was building an algorithmic-trading system, learning as I went,&lt;br&gt;
and trying to solve a problem I did not fully understand yet.&lt;/p&gt;

&lt;p&gt;When the sprint ended, I could not tell whether I had built something useful or just wrapped a lot of&lt;br&gt;
code around a clever-sounding metaphor.&lt;/p&gt;

&lt;p&gt;The literal DNA idea had to go. One smaller question survived:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When somebody adds a new Postgres index, how do we know it is useful and not just valid-looking SQL?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question became IndexPilot.&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem I kept running into
&lt;/h2&gt;

&lt;p&gt;Adding an index looks simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="n"&gt;orders_customer_created_idx&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I could read that line. I could understand the intention. What I could not tell was whether the real&lt;br&gt;
database needed it.&lt;/p&gt;

&lt;p&gt;Maybe the query it is meant to help hardly ever runs. Maybe another index already covers the same&lt;br&gt;
columns. Maybe PostgreSQL would ignore it. Maybe it helps reads but adds more cost to every write.&lt;/p&gt;

&lt;p&gt;The SQL can look completely reasonable while the decision is still wrong.&lt;/p&gt;

&lt;p&gt;That felt like a useful place for a small tool. Not a tool that changes the database automatically.&lt;br&gt;
Just something that collects enough evidence to make the next review less guessy.&lt;/p&gt;
&lt;h2&gt;
  
  
  What IndexPilot does
&lt;/h2&gt;

&lt;p&gt;IndexPilot reviews the exact &lt;code&gt;CREATE INDEX&lt;/code&gt; statement in a migration.&lt;/p&gt;

&lt;p&gt;It can compare that proposed index with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;query patterns from &lt;code&gt;pg_stat_statements&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;indexes that already exist;&lt;/li&gt;
&lt;li&gt;an optional hypothetical plan from HypoPG.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It returns a short verdict and the evidence behind it. The result can be written as JSON, Markdown,&lt;br&gt;
or SARIF for CI and pull requests.&lt;/p&gt;

&lt;p&gt;It does not apply the migration. It does not create or delete an index. It does not run&lt;br&gt;
&lt;code&gt;EXPLAIN ANALYZE&lt;/code&gt;, and it does not claim that a planner estimate is real production speed.&lt;/p&gt;

&lt;p&gt;The most positive verdict is &lt;code&gt;worth_benchmarking&lt;/code&gt;. That wording is deliberate. It means the idea has&lt;br&gt;
enough evidence to test properly. It does not mean the index is safe to ship.&lt;/p&gt;
&lt;h2&gt;
  
  
  You can try it without a database
&lt;/h2&gt;

&lt;p&gt;I wanted the first run to be easy because I hate installing a tool only to discover that it needs&lt;br&gt;
six other things before it can show anything.&lt;/p&gt;

&lt;p&gt;The repository includes a cleaned-up workload snapshot, so this example needs no credentials,&lt;br&gt;
Docker, extension, or running database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/eyeinthesky6/indexpilot.git
&lt;span class="nb"&gt;cd &lt;/span&gt;indexpilot
uvx &lt;span class="nt"&gt;--from&lt;/span&gt; &lt;span class="s2"&gt;"indexpilot==1.1.0a5"&lt;/span&gt; indexpilot review &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--migration-file&lt;/span&gt; examples/quickstart/migration.sql &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--snapshot-file&lt;/span&gt; examples/quickstart/workload-snapshot.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; artifacts/first-review.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--markdown-output&lt;/span&gt; artifacts/first-review.md &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--stdout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The example returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Index statements reviewed: 1
Verdicts: {'existing_overlap': 1}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The proposed index overlaps one already present in the sample catalog. IndexPilot does not tell you&lt;br&gt;
to delete either one. It tells you that the new index needs a better reason before both are carried&lt;br&gt;
forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not use the advanced Postgres tools?
&lt;/h2&gt;

&lt;p&gt;You should use them.&lt;/p&gt;

&lt;p&gt;Migration linters can catch unsafe DDL. Index advisers can suggest indexes. HypoPG can show a plan&lt;br&gt;
with a hypothetical index. A proper production-like benchmark can measure latency, write cost,&lt;br&gt;
index size, build time, and rollback.&lt;/p&gt;

&lt;p&gt;IndexPilot is not trying to replace those tools. It sits earlier in the process and asks a narrower&lt;br&gt;
question: does this exact index proposal have enough evidence to spend time benchmarking it?&lt;/p&gt;

&lt;p&gt;That is probably most useful in a pull request, especially when the migration was suggested by an AI&lt;br&gt;
coding agent or by an application developer who does not spend all day tuning Postgres.&lt;/p&gt;

&lt;p&gt;In other words, somebody like me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I still do not know
&lt;/h2&gt;

&lt;p&gt;I do not have a dramatic performance story or thousands of users. I have a public tool, a working&lt;br&gt;
database-free example, tests, and a question I think other developers may recognize.&lt;/p&gt;

&lt;p&gt;The tool also has clear limits. It does not prove production speed. It does not measure physical&lt;br&gt;
bloat or write overhead. Some index types and shapes are still unsupported because pretending to&lt;br&gt;
understand them would be worse than returning an honest "unsupported" result.&lt;/p&gt;

&lt;p&gt;I am publishing it now because keeping it private will not answer the main question: is this review&lt;br&gt;
step actually useful to people who work with PostgreSQL?&lt;/p&gt;

&lt;p&gt;If you review database migrations, I would genuinely like to know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What do you check before accepting a new index, and which part of that review is still annoyingly&lt;br&gt;
manual?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can run the small example in the&lt;br&gt;
&lt;a href="https://github.com/eyeinthesky6/indexpilot" rel="noopener noreferrer"&gt;IndexPilot repository&lt;/a&gt;. If it fails, the failure itself is&lt;br&gt;
useful feedback. If it works, tell me whether the verdict helped or merely stated the obvious.&lt;/p&gt;

&lt;p&gt;Real project, real story, guided by human, drafted by AI.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>opensource</category>
      <category>database</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Meet ArtistPass: an open-source portfolio template for actors and artists</title>
      <dc:creator>Jai Thakur</dc:creator>
      <pubDate>Sat, 11 Jul 2026 05:47:30 +0000</pubDate>
      <link>https://dev.to/6edroid/meet-artistpass-an-open-source-portfolio-template-for-actors-and-artists-4od6</link>
      <guid>https://dev.to/6edroid/meet-artistpass-an-open-source-portfolio-template-for-actors-and-artists-4od6</guid>
      <description>&lt;p&gt;Hello DEV 👋&lt;/p&gt;

&lt;p&gt;I have just released &lt;strong&gt;ArtistPass v0.1.0&lt;/strong&gt;, a small open-source portfolio website for actors, performers and other artists.&lt;/p&gt;

&lt;p&gt;The idea started with a very ordinary problem: an artist's professional material often lives in six different places.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Headshots in a Drive folder&lt;/li&gt;
&lt;li&gt;Reels on YouTube or Vimeo&lt;/li&gt;
&lt;li&gt;A resume attached to an old email&lt;/li&gt;
&lt;li&gt;Recent work on Instagram&lt;/li&gt;
&lt;li&gt;A casting card saved somewhere else&lt;/li&gt;
&lt;li&gt;Contact details copied into every new message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ArtistPass turns that collection into one designed, shareable website.&lt;/p&gt;

&lt;p&gt;It is not a casting marketplace, a social network or a promise of auditions. It is simply a focused presentation and publishing tool that an artist can own.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in v0.1.0?
&lt;/h2&gt;

&lt;p&gt;The current actor-focused template includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a cinematic landing page;&lt;/li&gt;
&lt;li&gt;showreel and role-specific clips;&lt;/li&gt;
&lt;li&gt;headshots and a gallery;&lt;/li&gt;
&lt;li&gt;role-fit and casting information;&lt;/li&gt;
&lt;li&gt;resume and casting-card downloads;&lt;/li&gt;
&lt;li&gt;contact and sharing flows;&lt;/li&gt;
&lt;li&gt;a browser Admin for routine updates;&lt;/li&gt;
&lt;li&gt;Vercel Blob publishing for shared text, images and PDFs;&lt;/li&gt;
&lt;li&gt;a read-only fictional public demo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The demo uses a fictional artist, so the full experience can remain public without borrowing a real person's identity or private material.&lt;/p&gt;

&lt;h2&gt;
  
  
  The interesting constraint was not the homepage
&lt;/h2&gt;

&lt;p&gt;The visual design was the enjoyable part. The harder question was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can a non-technical owner update a polished static site without turning it into another large CMS?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The current architecture is deliberately small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index.html
  -&amp;gt; loads /api/config
  -&amp;gt; renders the public portfolio and browser Admin

Admin Publish
  -&amp;gt; checks a server-side password
  -&amp;gt; writes artist-config.js to Vercel Blob
  -&amp;gt; the live site reads the new config on refresh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is no database and no user-account system. Each deployment has its own private Admin publishing password. Images and PDFs can upload to Blob. Videos stay on services that already know how to host and stream video, so the artist pastes a link instead of asking this project to become a transcoding platform.&lt;/p&gt;

&lt;p&gt;GitHub publishing is still available as a fallback for older installations, but Blob is now the simpler default.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I deliberately did not build
&lt;/h2&gt;

&lt;p&gt;Small projects become confusing surprisingly quickly when every possible feature is treated as a requirement.&lt;/p&gt;

&lt;p&gt;ArtistPass does &lt;strong&gt;not&lt;/strong&gt; currently include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multi-user roles and team permissions;&lt;/li&gt;
&lt;li&gt;subscriptions or billing;&lt;/li&gt;
&lt;li&gt;private video hosting or DRM;&lt;/li&gt;
&lt;li&gt;a general drag-and-drop page builder;&lt;/li&gt;
&lt;li&gt;dozens of themes generated on demand;&lt;/li&gt;
&lt;li&gt;claims about bookings, casting decisions or career outcomes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lightweight Admin password is suitable for this small, owner-operated template. It would not be the right authentication model for a multi-tenant SaaS product, and the documentation says that plainly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two honest ways to use it
&lt;/h2&gt;

&lt;p&gt;The release has two different entry points.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For developers and website makers:&lt;/strong&gt; clone the MIT-licensed template, deploy it with Vercel, connect Blob storage and adapt it for an artist or client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For non-technical artists:&lt;/strong&gt; use an assisted setup path. Someone technical handles GitHub, Vercel, the initial content and possibly the domain. After handoff, the artist uses the browser Admin for ordinary changes.&lt;/p&gt;

&lt;p&gt;I renamed the self-serve action to &lt;strong&gt;Developer&lt;/strong&gt; because the underlying Vercel flow still includes Git-provider choices, permissions and infrastructure setup. Calling that effortless onboarding for every artist would be misleading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why release it as open source?
&lt;/h2&gt;

&lt;p&gt;Open source makes this experiment more useful even if it never becomes a large product.&lt;/p&gt;

&lt;p&gt;Developers can inspect exactly what the Admin sends and where content is stored. Freelancers and small studios can start from a working artist-specific base. Artists are not locked into a proprietary editor simply because someone helped them set up the first version.&lt;/p&gt;

&lt;p&gt;It also gives the next decisions a better test. Before building a Lovable-style visual builder or ten category-specific themes, I would rather see whether developers fork the base, artists ask for setup, or contributors identify the parts worth extending.&lt;/p&gt;

&lt;h2&gt;
  
  
  You are welcome to explore it
&lt;/h2&gt;

&lt;p&gt;If you build static publishing tools, Vercel projects, portfolio templates or software for creative professionals, I would genuinely value your feedback.&lt;/p&gt;

&lt;p&gt;Useful contribution areas include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;musician, dancer, model or voice-artist layouts;&lt;/li&gt;
&lt;li&gt;clearer Admin wording;&lt;/li&gt;
&lt;li&gt;better gallery and media handling;&lt;/li&gt;
&lt;li&gt;simpler deployment guidance;&lt;/li&gt;
&lt;li&gt;accessibility and mobile improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository includes screenshots, setup documentation, contribution guidance, issue forms and the full v0.1.0 release notes.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://artistpass.vercel.app" rel="noopener noreferrer"&gt;https://artistpass.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/eyeinthesky6/artistpass" rel="noopener noreferrer"&gt;https://github.com/eyeinthesky6/artistpass&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Release:&lt;/strong&gt; &lt;a href="https://github.com/eyeinthesky6/artistpass/releases/tag/v0.1.0" rel="noopener noreferrer"&gt;https://github.com/eyeinthesky6/artistpass/releases/tag/v0.1.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for taking a look. If you try it, fork it or simply have an opinion about the architecture, I would be glad to hear what you think.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
