Building a document collection tool with vibe coding using Claude Code Desktop in 30 minutes
The author used Claude Code Desktop in a vibe coding style to build a document collection tool in about 30 minutes: it reads two Excel files—a customer list and a submission status sheet—first lists the non-submitters for manual confirmation, then outputs draft collection emails, and registers with Windows Task Scheduler to run automatically every Monday at 8:00. The article writes the requirements into CLAUDE.md, uses manual approval mode throughout, and notes that one should consult engineers and legal before involving real customer personal data.
Why read this
AI score 63
The original article documents the full 30-minute process of using Claude Code Desktop, from writing CLAUDE.md to registering a scheduled task, which can be adapted to other repetitive business scenarios.
Topics
Body · AI translation
In Part 1, we saw how Claude's new features have expanded the range of things "you can build yourself," while there are still areas best left to engineers.
This time, we'll go a step further and build a business application itself. We'll use Claude Code. It's an AI agent for writing programs, but we won't use the terminal. Let's open the desktop version, write the requirements in Japanese, have it build the app, and run it with test data—all in 30 minutes.
This time, we'll create the app using a method called vibe coding. Rather than writing code line by line yourself, this is a way of building where you convey the purpose and conditions in Japanese, and have the AI implement it while you check and revise.
Incidentally, the subject matter this time wasn't chosen on a whim. It was chosen from the perspective of "what makes a business application that will be used for a long time in the field." I'll explain the reason in the second half, so please do read to the end.
1 | Let's try building a document-collection reminder tool in 30 minutes
What we'll build in this installment / Prerequisites / Time required
What we'll build: A tool that, from a customer list (Excel) and the submission status of documents, identifies documents that haven't been submitted and creates draft reminder emails for each customer. Before running, it shows a list of "who will be reminded of what," and only after a person approves does it output the drafts.
Prerequisites: The Claude desktop app (Windows version. For Mac, see the note on substitutions) and a PC with Python installed (if not installed, see the "Appendix" at the end of the article). We won't use the terminal. The author tried it on the Max plan, but any plan that allows Claude Code will work the same. Screens are as of October 2026.
Time required: About 30 minutes (in the author's environment, about 25 minutes from preparing the working folder to exporting the drafts, and about 30 minutes including registering the scheduled run. Of that, about 10 minutes is waiting for Claude to generate. Since you'll be asked for approval many times, please allow some extra time.)
Data used: All fictional. Paste Tables 1 and 2 into Excel and use them.
Before getting into the steps, let's grasp the overall picture of the finished product with the following diagram.
The upper row is "when building." A person writes the requirements in Japanese into CLAUDE.md, Claude Code reads it, shows a plan, gets approval, and creates reminder_tool.py.
The lower row is "when running," and only the Python program runs. It reads the two Excel files—the customer list and the submission status—and first displays a list of "who will be reminded of what" and stops. When a person approves, it exports the list of unsubmitted items and the draft reminder emails. For the weekly automatic run (Step 4), Task Scheduler launches up to this "confirmation." Sending the emails is done by a person, all the way to the end.
The "future extensions" in the lower right will be touched on in the later "Brushing Up" section.
Figure 1: Overall picture of what we'll build this time. The upper row is "when building" (person → CLAUDE.md → Claude Code → reminder_tool.py), and the lower row is "when running" (two Excel files → confirmation → person approves → export → person reads and sends). Task Scheduler launches only the confirmation, and the lower right shows future extensions (to spreadsheets and chat tools via API).
Step 1: Open the Claude Code desktop version and decide on a working folder
Open the Claude desktop app and press the " " icon above the sidebar to switch to the Claude Code screen. From "Select environment," choose "New environment," specify a name (here, "Reminder Tool") and a working folder, and press "Create environment." Create one empty folder beforehand. This will be where the tool lives. For a folder used for the first time, you'll be asked "Do you trust this workspace?", so press "Trust workspace."
Figure 2: Entering a name and working folder in "New environment"
Once you've decided on the folder, check the approval mode. If "Auto" is shown at the bottom of the screen, press it and switch to "Manual (always confirm before changes)." "Auto" is a mode where Claude makes permission decisions itself, and "Manual" is a mode where it waits for your approval each time before creating or rewriting files or executing commands.
For now, set it to "Manual." The trick is not to loosen it until you can read what it's doing.
Figure 3: Approval mode menu "Permissions · This session"
Step 2: Write the requirements in CLAUDE.md
Create a file named CLAUDE.md in the working folder. This is the "rules for this folder" that Claude Code reads first. In it, write what, when, to whom, how far to automate, and where a person checks.
In Claude Code's input field, type "Please create CLAUDE.md. Its contents are as follows." and then paste the following and send it.
# Document Collection Reminder Tool ## Purpose Check each client's document submission status, identify unsubmitted documents, and create draft reminder emails. ## Input - Client list.xlsx (columns: Client ID, Company name, Contact name, Email address, Year advisory started) - Submission status.xlsx (columns: Client ID, Document name, Deadline, Submission date. If submission date is blank, it is unsubmitted) ## Output - Unsubmitted list.xlsx (for each client, list unsubmitted document names and deadlines) - In the Reminder emails/ folder, email drafts for each client (text files) ## Rules - Before running, display a list of "who will be reminded of what" and wait for approval - Do not send emails. Only create drafts - Use different wording for items past the deadline and items before the deadline (polite for past-due, light for upcoming) - The client list and submission status are read-only. Do not modify them - At the end, report the number of records in the original files and the number processed
When you send it, an approval card appears saying "Allow Claude to write CLAUDE.md?", and you can see what will be written. There is one thing to be careful about here. The large black button is "Always allow." If you press it, the same type of operation will proceed without confirmation from then on (the scope and duration differ depending on the type of operation). Until you get used to it, press the "∨" at the right end of the button and choose "Allow once."
Figure 4: Approval card requesting permission to write CLAUDE.md. You can see what will be written
This CLAUDE.md is the most important thing throughout the series. If you write the requirements in Japanese, Claude Code will read it every time it opens a session and refer to that premise in subsequent interactions.
The completed program runs without reading CLAUDE.md, but when you ask Claude Code to do something in this folder (fix wording, add a column, check for bugs), even in a new session it is designed to always share the premises written in CLAUDE.md before working. Prohibitions like "do not send emails" and "do not modify the original files" are written here in Japanese.
However, just writing them does not guarantee they will be followed. Have the program built with "confirmation only" and "writing out" separated, and make it so a person can stop it via the pre-execution list and approval (Step 3).
Step 3: Have it built, and run it with test data
Prepare test data. Paste Table 1 and Table 2 into Excel and save them in the working folder as "Client list.xlsx" and "Submission status.xlsx" respectively.
Table 1: Client list (fictional)
Client ID Company name Contact name Email address Year advisory started
C001 Aoba Construction Contact A a@example.com 2021
C002 Minato Foods Contact B b@example.com 2023
C003 Sakura Beauty Salon Contact C c@example.com 2024
C001 Payroll ledger 2026/11/05 2026/10/30
C002 October attendance record 2026/11/05
C002 Employment contracts (2 new hires) 2026/10/31
C003 October attendance record 2026/11/05 2026/11/02
(Blank submission date means unsubmitted)
Instruct Claude Code as follows.
Please build the tool according to CLAUDE.md. Before building, show me a plan of what files you will create.
Claude Code first checks the contents of the working folder and whether Python is available. At this point, it asks for approval even for read-only commands (it does not ask if it is only reading files in the folder), so you look at the contents and press "Allow once." It then presents a plan. The things to be created are shown in a table: "Reminder tool.py (main body)," "Unsubmitted list.xlsx (created when run)," and "Reminder emails/ drafts," and it explains that the behavior has two stages: "first just check, and once approval is given, write out." Finally, it asks, "May I start building with this plan?" so you press "Build with this plan."
Figure 5: The plan presented by Claude Code. Table of files to be created
In the author's environment, Claude Code raised one point here: "All the deadlines in Table 2 are after today, so if today is used as the basis, there will be zero overdue items."
On that basis, it made it possible to specify the reference date for the judgment. The screens for the unsubmitted list and reminder email drafts that appear later are the results of running it with the reference date set to November 3, the publication date of this article.
Once approved, the program is created. An approval card appears when writing the main body, and Claude Code tries handling the wording and odd data on a copy in a temporary folder so as not to dirty the production folder. Command approvals continue at this point as well, so you press "Allow once" while checking the contents. When you are looking at another window, you can also approve from a Windows notification. By this point, there had been about 10 approvals.
When the test is finished, it proceeds according to the rules written in CLAUDE.md. In the production folder, it runs only the check, displays the list of "who will be reminded of what," and waits for approval with "Do you want to write out to production with this content?"
Figure 6: The list of reminders displayed before execution. Client, recipient, type of wording, and documents to be reminded of are lined up
You look at the list and have any odd rows fixed. For example, if a row has "overdue" wording even though the deadline has not passed, you say, "The attendance record for C001 is not yet due, so make the wording milder." When you press "Write out" and approve the write-out command, Unsubmitted list.xlsx and per-client drafts are created.
Figure 7: The completed Unsubmitted list.xlsx opened in Excel. "Overdue" and "not yet due" appear in the "Status" column
Figure 8: One of the reminder email drafts. Polite wording that combines documents past the deadline and documents due soon into a single message
The end of the draft has a placeholder: "(Please insert your signature here)." If you have a standard signature, Claude Code will insert it if you write it in CLAUDE.md.
Finally, Claude Code reports the counts. In the author's environment, it was "3 client records, 5 submission status records. The breakdown is 2 submitted, 3 unsubmitted and included in the list, 0 excluded, matching the total of 5," and "2 companies to remind, 2 drafts." It also confirmed, using values calculated from the file contents, that the original two Excel files were unchanged before and after the write-out.
Figure 9: Report of the counts
Step 4: Make it run on a schedule
Make it run automatically every Monday morning. Instruct Claude Code to do this as well.
Please register this tool in Windows Task Scheduler so that it runs automatically every Monday at 8:00 a.m. Before registering it, show me what you will register.
Claude Code shows, in a table, the task name, the command to run, the working folder, the date and time, the user who runs it, and how to handle the case where the PC was off.
And here, a point came up that impressed the author: "The rule in CLAUDE.md to 'wait for approval' conflicts with unattended automatic execution." The options are "automate only the check" or "automate through write-out," and this time the former is chosen.
Only the part up to creating the list on Monday morning is automated, and write-out happens after a person approves it. What runs every week is the Python program that creates the list. Claude Code itself does not run every week.
When you approve the registration command, the task is registered. After registration, open Task Scheduler and check the registered task with your own eyes.
Figure 10: The registration details table shown by Claude Code, and the question "Which form should automatic execution take?"
Figure 11: The task registered in Task Scheduler. The trigger is "Start every Monday at 8:00"
We're about 30 minutes in at this point.
Let's connect it to chat and spreadsheets and polish it up
Once it works, let's broaden the data inputs and outputs. For example, export the list of non-submitters to a Google Spreadsheet and send draft reminders to a chat tool. Claude has a mechanism called MCP (Model Context Protocol), which lets Claude directly operate spreadsheets and chat. Chapter 10 of the book introduces the procedure for connecting via MCP.
However, when thinking of it as a business application that runs every week, the author recommends connecting directly via API rather than MCP. The reasons are as follows.
Note: From here on is the engineer's domain
The tool this time falls in the left column of the boundary table from the first installment of the series. One person uses it themselves, it runs on fictional data, it can be reverted to manual work if it breaks, and reading CLAUDE.md explains what it does.
Before running it on real customer data, check whether you are stepping into the right column. Customer lists contain personal information (contact names and email addresses). Use only data that your organization's rules permit to be sent to Claude. Simply replacing contact names and email addresses with codes like customer IDs does not make it non-personal information as long as it can be cross-referenced with other information.
If you are unsure about any of these three points, it is time to consult an engineer (your company's development department or your vendor's systems company). When personal information is involved, also consult those in charge of information systems and legal affairs. When consulting, show CLAUDE.md as it is. The requirements are written in Japanese, so the discussion will move quickly.
The five patterns that repeat across industries
Chasing down document collection was not a topic chosen on a whim. The author has organized 200 major industries and business categories in Japan along three axes: "What tasks consume time," "Of those, what parts can AI reduce," and "What judgments do people retain." Even across different industries, the same shapes of work appear repeatedly, and they can be summarized into the following five patterns.
Table 3: The five patterns of business applications that repeat across industries
Pattern | Content | Examples
Reminder/Collection type | Identify who has not submitted or who has not paid, and create draft reminders | Document collection by labor and social security attorneys and tax accountants, invoice collection in the construction industry
Follow-up type | Reach out to someone you have had contact with before, at appropriate intervals, with the next step | Inspection notices from car dealerships, follow-up after real estate viewings
Drafting type | Draft standard documents and reports from source materials | Care records, daily reports, meeting minutes
First-response type | Classify inquiries, respond to standard ones, and route exceptions to people | Dental appointment changes, delivery inquiries for online shopping
Inspection type | Mechanically check documents and data for omissions and contradictions | Filing documents for labor and social security attorneys, order sheets for restaurants
What all five have in common is that "AI does not decide everything to the end." For example, reminder emails stop at the draft stage, and a person sends them. Inquiries stop at classification and standard replies, and people handle exceptions. This boundary overlaps with the "can be reverted to manual work if it breaks" range from the boundary discussion in the first installment.
When choosing what to build next in your own work, these five patterns also serve as criteria. Conversely, applications that get built but go unused share common traits: only the creator can use them (they cannot be handed over), they stop when an exception arrives, and the data input remains manual (so transcription work remains in the end).
The reason the tool created this time leaves its requirements in CLAUDE.md, routes exceptions to people, and is built to read Excel as-is is to avoid these pitfalls.
What has changed now that non-engineers can build applications
Once you understand these patterns, the way work proceeds also changes.
Previously, we would hear about a customer's operations and then think about what to build. Now, if we know the industry, we form a hypothesis, build the application first with test data, show the working version, and then ask questions. That is because asking "At your company, how are the criteria for these reminders set?" in front of something that actually works yields more concrete answers.
I think this is a change happening on the engineer's side as well. As AI makes it faster to understand operations, at the same time as "people on the business side moving closer to development," "engineers moving closer to operations" is also happening.
Conclusion
This time, we created a practical business application in 30 minutes using vibe coding with Claude Code. At the same time, we explained how to separate out what data may be input.
Next time, we will cover the "memory" and "protection" mechanisms for continuing to use the tool you built. Claude Code does not carry over the previous conversation in a new session. We will introduce, while actually building it, a method for leaving rules and the reasons behind decisions in files within a folder and reliably passing them to the next session.
Note: When Python is not installed
The program in Step 3 runs on Python. If Python is not installed on your PC, ask Claude Code, "I want to install Python. Show me how to install it." On Windows, in environments where winget is available, it will guide you through installing it with winget; if not available, it will guide you through using the official Python installer (winget is available on Windows 11 and relatively recent Windows 10, but may not be usable on company-managed devices, etc.). If you review and approve the content, Claude Code will proceed. If the component for reading and writing Excel (openpyxl) is missing, Claude Code will notice before building and guide you through installing it. On company PCs, follow your information systems department's procedures for installing software.