<?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: Rina Park</title>
    <description>The latest articles on DEV Community by Rina Park (@rina-park).</description>
    <link>https://dev.to/rina-park</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3594905%2F009808ea-e69f-407e-ab31-cb07eba1cfb6.png</url>
      <title>DEV Community: Rina Park</title>
      <link>https://dev.to/rina-park</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rina-park"/>
    <language>en</language>
    <item>
      <title>Structuring the Database: Building an AI Task System [Floxis #2]</title>
      <dc:creator>Rina Park</dc:creator>
      <pubDate>Thu, 16 Apr 2026 05:10:46 +0000</pubDate>
      <link>https://dev.to/rina-park/structuring-the-database-building-an-ai-task-system-floxis-2-3g56</link>
      <guid>https://dev.to/rina-park/structuring-the-database-building-an-ai-task-system-floxis-2-3g56</guid>
      <description>&lt;h2&gt;
  
  
  1. Overview
&lt;/h2&gt;

&lt;p&gt;In this article, I document the development process of a personal project called Floxis (codename).&lt;/p&gt;

&lt;p&gt;Floxis is a system (PersonalOS) that uses AI to structure natural language input and manage tasks. It is planned to be extended in the future to support features such as workflows.&lt;/p&gt;

&lt;p&gt;In the previous phase of development, I adopted a minimal structure to get a rough understanding of how the system would behave. For more details, see the &lt;a href="https://dev.to/rina-park/designing-before-coding-building-an-ai-task-system-floxis-1-4954"&gt;previous article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This time, I designed a data model with future extensions in mind—particularly productivity analysis—and reorganized the database structure.&lt;/p&gt;

&lt;p&gt;The design focuses on the following points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Separation of current state and history
&lt;/li&gt;
&lt;li&gt;Avoiding strict workflow constraints
&lt;/li&gt;
&lt;li&gt;Maintaining a minimal structure while ensuring extensibility
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, I explain the design decisions behind this data model and the reasoning behind them.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/rina-park/floxis" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Core Structure
&lt;/h2&gt;

&lt;p&gt;The system is composed of the following five tables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tasks&lt;/code&gt;: current state and basic task data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;statuses&lt;/code&gt;: status definitions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;categories&lt;/code&gt;: classification labels&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;projects&lt;/code&gt;: grouping of tasks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;task_status_logs&lt;/code&gt;: status change history&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Concept Diagram
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem7w61pbj8x4i404o9z0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem7w61pbj8x4i404o9z0.png" alt="Concept Diagram" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Design Principles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Separate current state and history to keep operations lightweight while enabling analysis&lt;/li&gt;
&lt;li&gt;Store statuses as definitions only; allow free transitions&lt;/li&gt;
&lt;li&gt;Treat categories and projects as independent concepts&lt;/li&gt;
&lt;li&gt;Apply categories at the project level while still allowing standalone tasks&lt;/li&gt;
&lt;li&gt;Treat &lt;code&gt;status_id&lt;/code&gt; as the single source of truth; &lt;code&gt;completed_at&lt;/code&gt; is auxiliary&lt;/li&gt;
&lt;li&gt;Keep the structure minimal but extensible&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Design Decisions
&lt;/h2&gt;

&lt;p&gt;In this design, I intentionally avoided some common approaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1. Why I didn’t implement strict state transitions
&lt;/h3&gt;

&lt;p&gt;In reality, tasks don’t follow a strict linear flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start → on hold → resume → complete&lt;/li&gt;
&lt;li&gt;complete → reopen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we enforce transitions strictly, we introduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ordering constraints&lt;/li&gt;
&lt;li&gt;invalid transition handling&lt;/li&gt;
&lt;li&gt;UI complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this project, I decided that:&lt;/p&gt;

&lt;p&gt;👉 Knowing the current state and having a history log is sufficient.&lt;/p&gt;




&lt;h3&gt;
  
  
  6.2. Why I didn’t implement workflow constraints
&lt;/h3&gt;

&lt;p&gt;Workflows tend to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reduce flexibility&lt;/li&gt;
&lt;li&gt;depend heavily on task granularity&lt;/li&gt;
&lt;li&gt;be overkill for personal use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In personal task management, the meaning of states is often fluid.&lt;/p&gt;

&lt;p&gt;So instead of enforcing workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;statuses are just definitions&lt;/li&gt;
&lt;li&gt;transitions are unrestricted&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  6.3. How analysis works with only logs
&lt;/h3&gt;

&lt;p&gt;Instead of modeling perfect workflows, analysis is &lt;strong&gt;result-based&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;time from creation → final completion&lt;/li&gt;
&lt;li&gt;time from first “in progress” → completion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These can be derived from logs.&lt;/p&gt;

&lt;p&gt;The goal is not perfect traceability, but:&lt;/p&gt;

&lt;p&gt;👉 extracting meaningful metrics.&lt;/p&gt;

&lt;p&gt;So logs are append-only and intentionally simple.&lt;/p&gt;




&lt;h3&gt;
  
  
  6.4. Why categories are tied to projects
&lt;/h3&gt;

&lt;p&gt;I separate roles as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Category = type of work (e.g., development, study)&lt;/li&gt;
&lt;li&gt;Project = unit of effort (e.g., Floxis)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If tasks inside a project have independent categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;categorization becomes fragmented&lt;/li&gt;
&lt;li&gt;aggregation becomes harder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I decided:&lt;/p&gt;

&lt;p&gt;👉 project-level category is the default.&lt;/p&gt;




&lt;h3&gt;
  
  
  6.5. Why tasks can exist without categories or projects
&lt;/h3&gt;

&lt;p&gt;Not all tasks are structured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;quick notes&lt;/li&gt;
&lt;li&gt;one-off tasks&lt;/li&gt;
&lt;li&gt;unclassified items&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A system that requires structure upfront will fail in real use.&lt;/p&gt;

&lt;p&gt;So:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;project_id&lt;/code&gt; is optional&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;category_id&lt;/code&gt; is optional&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 the system accepts unstructured input first.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Key Rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1. Category handling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;projects.category_id&lt;/code&gt; can be null&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tasks.category_id&lt;/code&gt; is only for standalone tasks&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;project_id&lt;/code&gt; is set, category is derived from the project&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  7.2. Status handling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tasks.status_id&lt;/code&gt; is the single source of truth&lt;/li&gt;
&lt;li&gt;No workflow constraints&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  7.3. Task completion
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;completed_at&lt;/code&gt; is set only when status = completed&lt;/li&gt;
&lt;li&gt;Reset to null if status changes&lt;/li&gt;
&lt;li&gt;Represents current completion state, not history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: To keep &lt;code&gt;status_id&lt;/code&gt; and &lt;code&gt;completed_at&lt;/code&gt; consistent, synchronization is enforced at the database level using a trigger.&lt;/p&gt;




&lt;h3&gt;
  
  
  7.4. Status logs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;task_status_logs&lt;/code&gt; is append-only&lt;/li&gt;
&lt;li&gt;A new record is inserted on each status change&lt;/li&gt;
&lt;li&gt;Used for analytics, not for enforcing workflows&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. ER Diagram
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdz6lqxtk46masqeb5o9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdz6lqxtk46masqeb5o9d.png" alt="ER Diagram" width="617" height="958"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Implementation
&lt;/h2&gt;

&lt;p&gt;The migration was done in three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add new structures&lt;/li&gt;
&lt;li&gt;Migrate existing data&lt;/li&gt;
&lt;li&gt;Remove legacy columns&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Migration files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rina-park/floxis/blob/main/supabase/migrations/20260416023200_add_task_masters_and_refs.sql" rel="noopener noreferrer"&gt;supabase/migrations/20260416023200_add_task_masters_and_refs.sql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rina-park/floxis/blob/main/supabase/migrations/20260416023550_migrate_task_status_and_category.sql" rel="noopener noreferrer"&gt;supabase/migrations/20260416023550_migrate_task_status_and_category.sql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rina-park/floxis/blob/main/supabase/migrations/20260416024809_drop_legacy_task_columns.sql" rel="noopener noreferrer"&gt;supabase/migrations/20260416024809_drop_legacy_task_columns.sql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rina-park/floxis/blob/main/supabase/migrations/20260416045055_sync_completed_at_with_status.sql" rel="noopener noreferrer"&gt;supabase/migrations/20260416045055_sync_completed_at_with_status.sql&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to evolve the schema without breaking existing data.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Conclusion
&lt;/h2&gt;

&lt;p&gt;Strict workflows can sometimes get in the way of personal productivity.&lt;/p&gt;

&lt;p&gt;For Floxis, I’m taking a “log-first, constraint-last” approach—keeping the experience flexible while ensuring data integrity at the database level.&lt;/p&gt;

&lt;p&gt;This design prioritizes flexibility over strict control, accepting some trade-offs in consistency to keep the system adaptable in its early stage.&lt;/p&gt;

&lt;p&gt;In the next article, I’ll align the application layer with this new schema.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>softwareengineering</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Designing Before Coding: Building an AI Task System [Floxis #1]</title>
      <dc:creator>Rina Park</dc:creator>
      <pubDate>Wed, 15 Apr 2026 10:59:13 +0000</pubDate>
      <link>https://dev.to/rina-park/designing-before-coding-building-an-ai-task-system-floxis-1-4954</link>
      <guid>https://dev.to/rina-park/designing-before-coding-building-an-ai-task-system-floxis-1-4954</guid>
      <description>&lt;h2&gt;
  
  
  1. Overview
&lt;/h2&gt;

&lt;p&gt;In this article, I’ll document the development process of a personal project called Floxis (codename).&lt;/p&gt;

&lt;p&gt;To improve my development skills, I’m building this project by thinking through the design from the start.&lt;/p&gt;

&lt;p&gt;Floxis is a system that uses AI to structure natural language input and manage tasks (PersonalOS). In the future, I plan to extend it to support workflows and other features.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/rina-park/floxis" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What I did in Floxis #1
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Defined the development scope
&lt;/li&gt;
&lt;li&gt;Selected the tech stack
&lt;/li&gt;
&lt;li&gt;Set up the initial project (Next.js / Supabase)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Defining the Development Scope
&lt;/h2&gt;

&lt;p&gt;Floxis is intended to evolve into a system that manages tasks, habits, assets, and schedules in an integrated way.&lt;/p&gt;

&lt;p&gt;However, for v0.1, I’m prioritizing building a minimal and stable foundation rather than expanding features.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1. What’s included in v0.1
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Task creation (manual + AI input)&lt;/li&gt;
&lt;li&gt;Task list display&lt;/li&gt;
&lt;li&gt;Completion management
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.2. What’s not included
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Habit tracking&lt;/li&gt;
&lt;li&gt;Asset management&lt;/li&gt;
&lt;li&gt;Schedule integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3. Notes
&lt;/h3&gt;

&lt;p&gt;AI will be integrated as part of the system, but its role and detailed design will be covered in a separate article.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Initial Project Setup
&lt;/h2&gt;

&lt;p&gt;In Floxis #1, I set up the frontend, backend, and database to establish a minimal working system.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1. Creating the Next.js project
&lt;/h3&gt;

&lt;p&gt;I created a Next.js project with the following settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript: enabled
&lt;/li&gt;
&lt;li&gt;ESLint: enabled
&lt;/li&gt;
&lt;li&gt;App Router: enabled (current standard)
&lt;/li&gt;
&lt;li&gt;React Compiler: disabled (prioritizing stability)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this stage, I prioritized stability and ease of understanding over performance optimization.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2. Setting up the database with Supabase
&lt;/h3&gt;

&lt;p&gt;I created a project in Supabase and defined the &lt;code&gt;tasks&lt;/code&gt; table.&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;table&lt;/span&gt; &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt; &lt;span class="k"&gt;primary&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="n"&gt;gen_random_uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;title_original&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="s1"&gt;'pending'&lt;/span&gt;
    &lt;span class="k"&gt;check&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'pending'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'completed'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
  &lt;span class="n"&gt;due_date&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;timestamp&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="k"&gt;zone&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="n"&gt;completed_at&lt;/span&gt; &lt;span class="nb"&gt;timestamp&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="k"&gt;zone&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3. Connecting Next.js and Supabase
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Installed &lt;code&gt;@supabase/supabase-js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set up environment variables in &lt;code&gt;.env.local&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Created a Supabase client&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After that, I implemented data fetching on the top page and confirmed that data could be retrieved from the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4. Implementing task creation
&lt;/h3&gt;

&lt;p&gt;Using Server Actions, I enabled adding tasks from the UI.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Form submission → insert into DB&lt;/li&gt;
&lt;li&gt;Re-fetch the list using &lt;code&gt;revalidatePath&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This established the minimal loop of &lt;strong&gt;“create → display”&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.5. Introducing migration management
&lt;/h3&gt;

&lt;p&gt;I introduced migration management using the Supabase CLI to manage database changes as code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;supabase init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;supabase link&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Created a baseline with &lt;code&gt;db pull&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Committed migration files to Git&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures reproducibility and version control of the database schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. What’s working after Floxis #1
&lt;/h2&gt;

&lt;p&gt;At this point, the following minimal system is in place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Task creation&lt;/li&gt;
&lt;li&gt;Task list display&lt;/li&gt;
&lt;li&gt;Database connectivity&lt;/li&gt;
&lt;li&gt;Database schema versioning&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Conclusion
&lt;/h2&gt;

&lt;p&gt;Floxis #1 didn’t involve much code, but it established a minimal system that actually works.&lt;/p&gt;

&lt;p&gt;By thinking through the design from the start, I feel I was able to clarify the foundation of the system.&lt;/p&gt;

&lt;p&gt;In Floxis #2 and beyond, I’ll work on expanding the data structure, adding features, and integrating AI.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>nextjs</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
