Show original
Try the app

Linora Works
Enjoyed this article?
Support さいとうレタス
AI translation
On September 15, 2026, I officially released "Linora Works," a cost, inventory, and sales management tool for handmade creators. Originally, I started building this tool to solve inconveniences I felt during my own handmade activities. It gradually took shape, and eventually reached the point where it was released as a monthly subscription web service. This time, I'll write about the behind-the-scenes of individual development—from the motivation to create Linora Works, to technology selection, billing and authentication, and testing before release.
Try the app

Linora Works
Enjoyed this article?
Support さいとうレタス
I work on web development while also creating and selling denim remake works under the name "Linora."
As I continued with handmade sales, I found myself needing to manage:
"How much did this piece cost to make?"
"How many materials do I have left right now?"
"Did this event actually make a profit?"
"I want to change prices between consignment sales and event sales"
At first, I managed everything using spreadsheets, but when materials, products, sales, and events were managed separately, it gradually became tedious.
That's when I thought:
I want a tool that consolidates all the management needed for handmade sales into one place
This was the beginning of the development.
At first, I had no plans to release it as a SaaS.
I simply wanted to create a tool that would be easy for me to use.
However, as I progressed with development and researched, I discovered that many handmade creators manage their work using Excel, spreadsheets, or handwritten notes.
"Wait, maybe this isn't just my problem?"
I started thinking this way, and midway through, I redesigned it with public release in mind.
A personal tool can be a bit rough and still work, but when other people are going to use it, you need to think about authentication, billing, account deletion, data protection, and error handling.
From that point on, it transformed from a "personal app" into "service development."
Linora Works primarily uses the following technologies:
I structured it so that frontend and backend are developed together with Next.js without separation.
Since this is personal development, I prioritized "not increasing the number of things to operate."
For the database, I use PostgreSQL and manage it on Neon.
I rely on Clerk for authentication and Stripe for payments.
Rather than building everything from scratch, I decided that delegating critical parts like authentication and payments to existing services has greater advantages in both security and development speed.
One of the core features of Linora Works is cost calculation.
It seems simple at first glance, but it turned out to be surprisingly complex once I started building it.
For example, if a product uses:
I calculate the cost from the unit price of each material and the quantity used.
That much is straightforward.
However, in reality:
What if material prices change midway?
If fixed costs are included in the cost of goods, do I recalculate past sales?
If I edit product information after selling, how do I handle past profits?
These kinds of issues come up.
Especially with accounting and sales tools, if you recalculate based only on current settings, past figures change too.
For this reason, I adjusted the design so that fixed costs have history, ensuring that past numbers don't change later.
Rather than just "getting numbers,"
I was very conscious about whether the numbers would still make sense when looking back at them later
I also struggled with inventory management.
For example, if a product has 3 units in stock, but I register 5 units sold in the sales log:
Do I just make the inventory negative?
Do I reject the sales registration itself?
Do I just show a warning?
In Linora Works, if there's insufficient inventory, the registration is rejected and the app displays which products and quantities are short.
Rather than adding convenient features,
I prioritized preventing incorrect data from being created
These subtle behaviors were easier to imagine precisely because I actually do event sales myself.
I adopted Clerk for authentication.
Being able to skip self-implementing login, account creation, and session management is a huge help in personal development.
On the other hand, once you release as an actual service, there are many things the app side needs to consider:
Where to redirect after login
Account deletion
How to handle after cancellation
Linking users with Stripe
And so on.
Particularly, the cancellation process has this issue:
"Is it okay to delete everything the moment the account is deleted?"
In Linora Works, I synchronized Stripe's contract status with the app's user status, so data is retained for a while even after cancellation.
The price is 900 yen per month.
The first 31 days are free to use.
I use Stripe for payments.
When creating a billing service, you need to consider:
Checkout
Customer Portal
Webhooks
Subscription start
Cancellation
Payment failure
Subscription status
And so on.
Webhooks were particularly important.
When the contract status changes on Stripe, it must be correctly reflected in the app's database.
Even if it works in the test environment, I had to confirm multiple times right before release whether the production Secrets, Price IDs, and Webhook Secrets were set correctly.
Personally, I felt more "like I'm actually building a service" when working on the payment side than when building the UI.
Partway through development, I started operating with separate develop / staging / main branches.
In personal development, at first you might think:
"Maybe I can just push directly to main?"
But once billing and database migrations get involved, it becomes quite scary.
Particularly with Prisma migrations, I had to clarify:
Which environment it runs in
That it doesn't accidentally apply to the production database
How it executes during Vercel builds
Before the official release, I established a flow where I confirm everything in the staging environment before reflecting it to main.
This part was more of a lesson in operational design than in development itself.
It's hard to break your own app.
Since you know "if I click here, this happens," you unconsciously perform the correct operations.
So before release, I requested comprehensive testing from external testers.
The test cases ultimately numbered around 150-200.
I had them confirm all major features: material registration, product registration, inventory, sales, events, payments, and more.
Fortunately, no critical bugs were found, but
I was able to fix UI inconsistencies and subtle behaviors that I hadn't noticed myself.
Even in personal development, if you're releasing as a paid service, I think doing third-party testing was worth it.
"Alright, it's done,"
you think, but something always comes up until the last moment.
On the official release day itself, I received a bug report from a user about login issues.
When I investigated, it turned out that part of the login URL string was wrong.
It was a very simple mistake.
But the longer the development period, the more
small mistakes like this remain rather than complex logic issues.
Once I started receiving feedback directly from users after release, I finally felt the shift from "development" to "operations."
Official release on September 15, 2026.
On the first day, 4 people registered, and 2 of them even proceeded to payment registration with Stripe.
Of course, these aren't big numbers.
But a service that I alone conceived, designed, developed, tested, and released—actual users registered for it.
That was quite a thrilling experience.
A web app is just data and screens while you're coding.
It only becomes a "service" the moment someone starts using it.
What I realized from building Linora Works is:
In personal development, the hard part isn't just writing code.
Feature design
UI
Pricing
Terms of service
Payments
Testing
SEO
Landing page
Advertising
Customer inquiries
Release announcements
You do it all yourself.
You're a developer, designer, QA, marketer, and customer support all at once.
Conversely, that means
being able to build an entire service yourself
is the most interesting part of personal development.
Currently, the focus is on cost, inventory, and sales management, but I plan to add features going forward based on user feedback.
Candidates I'm considering include:
However, I don't want to make it a service that competes on feature count.
What I want most is for handmade creators to
"not spend time on management and focus on creation and sales"
Linora Works started from
"something I wanted,"
a very small reason.
But in personal development, maybe that's exactly the right way to start.
Since you're the user yourself, you understand what's frustrating.
You know what features are needed.
You notice what's hard to use.
And if other people feel the same problem, it has the potential to become a service.
Linora Works is still just beginning.
I want to nurture it little by little while listening to users' voices going forward.
私はWeb開発の仕事をしながら、「Linora」という名前でデニムリメイク作品の制作・販売もしています。
ハンドメイド販売を続けていると、
「この作品の原価はいくら?」
「今、材料はいくつ残っている?」
「このイベント、本当に利益が出ていた?」
「委託販売とイベント販売で価格を変えたい」
といった管理が少しずつ増えていきました。
最初はスプレッドシートなどで管理していましたが、材料・商品・売上・イベントを別々に管理していると、だんだん面倒になってきます。
そこで、
ハンドメイド販売に必要な管理を一つにまとめたツールが欲しい
と思ったのが開発の始まりでした。
当初は、SaaSとして公開する予定はありませんでした。
単純に、自分が使いやすいツールを作ろうと思っていました。
ただ、開発を進めながら調べてみると、ハンドメイド作家さんの多くがExcelやスプレッドシート、手書きなどで管理していることが分かりました。
「もしかして、自分だけの悩みではないのでは?」
と思い始め、途中から一般公開を前提に設計を見直しました。
自分専用ツールなら多少雑でも使えますが、他の人に使ってもらうとなると、認証・課金・退会・データ保護・エラー処理まで考える必要があります。
ここから一気に“個人用アプリ”から“サービス開発”になりました。
Linora Worksでは、主に以下の技術を使っています。
フロントエンドとバックエンドを分けず、Next.jsでまとめて開発できる構成にしました。
個人開発なので、できるだけ「運用するものを増やさない」ことを重視しています。
データベースはPostgreSQLを使い、Neon上で管理。
認証はClerk、決済はStripeに任せています。
全部自前で作るよりも、認証や決済のような重要部分は既存サービスに任せる方が、安全性と開発スピードの両方でメリットが大きいと判断しました。
Linora Worksの中心機能の一つが原価計算です。
一見すると単純ですが、作り始めると意外と複雑でした。
例えば、ある商品に
を使う場合、それぞれの材料単価と使用量から原価を計算します。
ここまでは簡単です。
しかし実際には、
材料価格が途中で変わったらどうするか。
固定費を原価に含める場合、過去の売上まで再計算するのか。
販売後に商品情報を編集したら、過去の利益はどう扱うのか。
といった問題が出てきます。
特に会計系・売上系のツールでは、現在の設定だけを見て再計算すると、過去の数字まで変わってしまいます。
そのため、固定費については履歴を持たせるなど、後から数字が変わらないように設計を調整しました。
「数字が出ればいい」ではなく、
あとから見返しても意味のある数字になっているか
をかなり意識しました。
在庫管理でも悩みました。
例えば在庫3個の商品を、売上登録で5個売ったことにした場合。
そのまま在庫をマイナスにするのか。
売上登録自体を拒否するのか。
警告だけ出すのか。
Linora Worksでは、在庫不足の場合は登録を拒否し、不足している商品と数量を表示するようにしました。
便利機能を増やすよりも、
間違ったデータを作らせない
ことを優先しています。
こうした細かい挙動は、実際に自分がイベント販売をしているからこそ想像しやすかった部分でもあります。
認証にはClerkを採用しました。
ログイン、アカウント作成、セッション管理などを自前実装せずに済むのは、個人開発ではかなり助かります。
一方で、実際にサービスとして公開すると、
ログイン後の遷移先
アカウント削除
退会後の扱い
Stripeとのユーザー紐付け
など、アプリ側で考えることも多くありました。
特に退会処理は、
「アカウントを消した瞬間に全部削除していいのか?」
という問題があります。
Linora Worksでは、Stripeの契約状態とアプリのユーザー状態を連携させ、退会後もしばらくデータを保持する形にしました。
料金は月額900円です。
最初の31日間は無料で利用できます。
決済にはStripeを使っています。
課金サービスを作る上では、
Checkout
Customer Portal
Webhook
契約開始
解約
支払い失敗
サブスクリプション状態
などを一通り考える必要がありました。
特にWebhookは重要でした。
Stripe上で契約状態が変わったときに、アプリ側のDBにも正しく反映しなければいけません。
テスト環境では動いていても、本番用のSecretやPrice ID、Webhook Secretが正しく設定されているかなど、リリース直前まで何度も確認しました。
個人的には、UIを作っているときよりも、決済まわりを触っているときの方が「本当にサービスを作っている感」が強かったです。
開発途中から、develop / staging / mainを分けて運用するようにしました。
個人開発だと最初は
「mainに直接入れてもいいかな」
と思いがちですが、課金やDBマイグレーションが絡み始めると、かなり怖くなります。
特にPrismaのmigrationは、
どの環境で実行されるのか
本番DBに誤って適用されないか
Vercelのビルド時にどう実行するか
を整理しました。
正式リリース前には、staging環境で一通り確認してからmainへ反映する流れにしました。
このあたりは、開発そのものより運用設計の勉強になりました。
自分で作ったアプリは、自分ではなかなか壊せません。
「ここを押したらこうなる」と知っているので、無意識に正しい操作をしてしまうからです。
そこでリリース前に、外部のテスターさんへ総合テストを依頼しました。
テストケースは最終的に150〜200程度。
材料登録、商品登録、在庫、売上、イベント、決済など、主要機能を一通り確認してもらいました。
幸い重大なバグは見つかりませんでしたが、
自分では気づかなかったUI上の違和感や細かな挙動を修正できました。
個人開発でも、お金を取るサービスとして公開するなら、第三者テストはやって良かったと思っています。
「よし、完成した」
と思っても、最後まで何か出ます。
正式リリース当日にも、ユーザーさんからログインまわりの不具合報告をいただきました。
調べてみると、ログインURLの文字列が一部間違っていました。
かなり単純なミスです。
でも、開発期間が長くなるほど、
難しいロジックより、こういう小さなミスの方が残っていたりします。
リリース後にユーザーさんから直接フィードバックをもらえるようになって、ようやく「開発」から「運用」にフェーズが変わった感覚がありました。
2026年9月15日に正式リリース。
初日は4名の方が登録し、そのうち2名がStripeで決済登録まで進んでくださいました。
もちろん、大きな数字ではありません。
でも、自分が一人で企画して、設計して、開発して、テストして、公開したサービスに、実際にユーザーが登録してくれる。
これはかなり嬉しい経験でした。
Webアプリは、コードを書いている間はただのデータと画面です。
誰かが使い始めた瞬間に、ようやく「サービス」になるのだと感じました。
Linora Worksを作って感じたのは、
個人開発で大変なのは、コードを書くことだけではないということです。
機能設計
UI
料金設定
利用規約
決済
テスト
SEO
LP
広告
問い合わせ対応
リリース告知
全部自分でやります。
開発者であり、デザイナーであり、QAであり、マーケターであり、カスタマーサポートでもあります。
逆に言えば、
自分でサービス全体を作れること
が個人開発の一番面白いところでもあります。
現在は、原価・在庫・売上管理が中心ですが、今後はユーザーさんの反応を見ながら機能を追加していく予定です。
候補として考えているのは、
など。
ただ、機能数を競うサービスにはしたくありません。
ハンドメイド作家さんが、
「管理に時間を取られず、制作や販売に集中できる」
ことを一番大切にしたいと思っています。
Linora Worksは、
「自分が欲しい」
という、とても小さな理由から始まりました。
でも個人開発では、そのくらいの始まり方がちょうどいいのかもしれません。
自分自身がユーザーなので、困っていることが分かる。
必要な機能が分かる。
使いにくい部分にも気づける。
そして、その問題を同じように感じている人がいれば、サービスになる可能性があります。
まだLinora Worksは始まったばかりです。
これからユーザーさんの声を聞きながら、少しずつ育てていきたいと思っています。