Drag & drop a single file here, or
Accepted: JSON (your catalog), or CSV (flat, one row per item)
This helper site was created as a tool to help with maintaining the ACS Catalog App. There are multiple different tools and step-by-step guides throughout the different tabs. This landing page is a general intro to the different tools that are available. Use the tabs above to navigate to the tool or guide you need.
Here is a list of the different sections in the helper:
systems.json file from our app and turn it into a simpler .csv file that you can open and edit like a table in Excel.
This makes editing multiple items much easier and more user-friendly when needed.
The forming systems and items displayed in the app—along with all of their attributes, like weight and SKU—are stored in a .json file. A .json file is basically a structured text file that organizes information in a strict format. Editing this file directly can be a hassle, and it also increases the risk of breaking something if you aren’t familiar with how JSON formatting works.
This conversion tool is designed to take the systems.json file from our app and turn it into a simpler .csv file that you can open and edit like a table in Excel. That makes it much easier to batch-edit multiple items at once. Once your edits are complete, you can re-upload the file here to convert it back into the proper JSON format.
This tool is loaded like an app that runs locally on your device, so all of the files used and generated by this tool stay 100% on your PC until you upload them to Github.
To use this, upload the systems.json or .csv file and then hit "Convert" below.
This tool is meant to help easily add new items to the systems.json of the app.
The systems.json is what the app uses to determine what systems and items to display, and in which order.
It also holds all of the information about those items (SKU, weight, folderID for catalog photos, etc...).
The form below will allow you to fill out all of the info for an item, preview all of the data, and then finalize it to the list of items that will be added.
After each item is finalized, they will appear in a list below the preview.
You can add multiple items all in one batch. Make sure you have added ALL of the items you want before hitting Download Package (ZIP) button.
Once you are absolutely sure you have all of the items that you want finalized, click Download Package (ZIP). This page will then generate a zipped folder for you
with all of the files you need to add the new items, along with a guide on what to do next. There will be a guide at the bottom of this page, along with a readme
file with those same instructions.
Drag & drop a PDF here, or
The ZIP you downloaded includes a readme.txt with these same instructions—keep it handy.
systems_json_update. Open it, then open the items folder.items folder that you just downloaded. Name the folder with the four-digit code in the filename. Example: for Item0520.json, create a folder named 0520.
Item####.json file into its matching folder (e.g., upload Item0520.json into folder 0520).systems.json on GitHub:
systems_json_update folder from the ZIP you downloaded and open systems.json. Press Ctrl+A to highlight all of the file, then Ctrl+C to copy all text.The ACS Catalog App has a Search By Photo feature that uses a custom-trained AI model to recognize catalog items from user-uploaded images. Each time a user uploads an image to use this feature, a copy is sent to the Form Yard Google Drive to be used for future model training. As new training photos are added and processed, the model becomes more accurate, improving with each new training run. This process of re-training the model happens in two parts: Sorting Photos and Re-Indexing.
Part one of the training process is sorting photos from the Recognition > Unsorted folder in Google Drive into their correct folders under Recognition > Items. This step ensures the AI model knows which catalog item each photo belongs to. It is super important to make you aren't putting items in the wrong folders, so if you are in doubt of what the item is, just leave it in the Unsorted folder. If the image is taken in a way that makes it impossible to verify what it is, you can also delete items from the folder. It's better to lose a training photo than to have it sorted incorrectly.
Here are the steps to sort the training photos:
Open Google Drive (link below) and navigate to the Recognition > Unsorted folder.
Review each photo and determine which item it belongs to.
If you’ve uploaded the systems.json file at the top of this page,
this page will create a searchable list of all items and their folder numbers.
If you have not uploaded the systems.json file, click the Get JSON From Github button at the top of the page
and download the file with the Download Raw File button on the upper right side of the toolbar above the code. Upload that file to this page to generate a list.
Be consistent. If a photo is misfiled, the AI model will learn incorrectly.
Our app uses Google Drive for storing and accessing the photos that are displayed in the app, and the training photos for our AI. It also uses Google Vertex AI for training the Image Recognition AI. Just like we would need to be signed in to authorize us to access our account for these services, the app also needs to have authorization to use the Google Drive and our custom AI model.
For us, this authorization comes in the form of a login. For the App, it comes in the form of an OAuth Refresh Token.
For security reasons, this Refresh Token will
Here are the steps to re-index the sorted training photos:
Open the Cloudflare Worker Settings page in the dashboard (link below)
(Keep this page open in a separate tab)
Then, in a different tab, open the worker's OAuth Path (link below)
This will take you to a 'Sign in with Google' page
On this Sign in with Google page, it will ask you to choose an account. Select the Form Yard gmail account (acsformyard@gmail.com)
If that account is not an option, click 'Use another account' and sign in with the Form Yard gamil account. If you're authorized to work on this, you should already have the login info.
After selecting the correct email, it will continue to a page that looks like this:
Google hasn’t verified this app
You’ve been given access to an app that’s currently being tested. You should only continue if you know the developer that invited you.
Click 'Continue' on that page. We created this app, so we know what it does. This is just a standard warning from Google.
After clicking continue, it will take you to the next page saying:
'acsformyard.workers.dev wants access to your Google Account'
Click 'Continue"
After some loading, that should return you to a page that looks something like this:
{"status":200,"token":{"access_token":"ya29.aEy0x4kC0AfH6SMCfC7ZM6OeWdXb1wR7vP1cFjqD7Ey0x4kCZx2O0mSgYZyZLmQ3F4EXAMPLEy0xEy0x4kC4kC0G7Z2F9Ey0x4kC2XQwUjq1z7hZZzMsl0x3Ey0x4kCEy0x4kC","expires_in":3599,"refresh_token":"1//0gEXAMPLE9kAqgYQfM6OeWdXb1wR7vP1cFjqD7ZxO_Lf4qXp4PZ8K0gNb1wR7vP1cFjqD7f4S2HXaE4UqV3Vxg8m2R","scope":"https://www.googleapis.com/auth/drive","token_type":"Bearer","refresh_token_expires_in":604799}}
You can check the Pretty-print box at the top to clean up how it displays and make it look more like this:
{
"status": 200,
"token": {
"access_token": "ya29.aEy0x4kC0AfH6SMCfC7ZM6OeWdXb1wR7vP1cFjqD7Ey0x4kCZx2O0mSgYZyZLmQ3F4EXAMPLEy0xEy0x4kC4kC0G7Z2F9Ey0x4kC2XQwUjq1z7hZZzMsl0x3Ey0x4kCEy0x4kC",
"expires_in": 3599,
"refresh_token": "1//0gEXAMPLE9kAqgYQfM6OeWdXb1wR7vP1cFjqD7ZxO_Lf4qXp4PZ8K0gNb1wR7vP1cFjqD7f4S2HXaE4UqV3Vxg8m2R",
"scope": "https://www.googleapis.com/auth/drive",
"token_type": "Bearer",
"refresh_token_expires_in": 604799
}
}
Find the refresh_token field and select the value for that field BETWEEN the quotation marks ("") and copy it.
The highlighted text below is an example of where to copy from:
"refresh_token": "1//0gEXAMPLE9kAqgYQfM6OeWdXb1wR7vP1cFjqD7ZxO_Lf4qXp4PZ8K0gNb1wR7vP1cFjqD7f4S2HXaE4UqV3Vxg8m2R"
In the Cloudflare Worker Settings page that you should still have open in another tab, scroll down to the Variables and Secrets section and find the Secret with the name GOOGLE_OAUTH_REFRESH_TOKEN. They should be organized alphabetically.
On the right side, near where it says Value encrypted , click on the pencil icon
On the right side of the page, you will see something like this pop up:
Define environment variables and secrets for this environment.
Type
Secret
▼
Variable name
GOOGLE_OAUTH_REFRESH_TOKEN
Value
This value is an encrypted Secret and is no longer viewable. To update the value you'll need to rotate this secret.
This value will no longer be viewable once saved
Click on "Rotate"
Paste the Refresh Token value that you copied during Step 7 into the text box that just appeared and then click Deploy in the lower right corner.
Now that you have updated the Refresh Token, open up the app on your phone or on the computer and test it out.
If you go to an item with a catalog photo, the photos should load like normal.
Test out the Search by Photo feature too. If that works like it should, then you are all done!
This page converts between your catalogue JSON and a flat CSV, and lets you add items safely via a preview-first flow. The CSV is only for editing convenience; the authoritative data is the JSON.
{ "systems": [ { name, order, items: [...] } ] }.name, sku, rentalsku, weight, notes, folderid, saletype, order, nickname, dbitemid.dbitemid: stored as a number in systems.json. New items auto-get the next integer.nickname in systems.json: always a single string that looks like a Python-style list, e.g. "['Cat Head', 'Cathead', 'Tank']". Single nickname becomes "['Rod Clamp Wrench']". (Internally we manage arrays; we stringify on export.)system, systemOrder, name, dbItemId, sku, rentalSku, weight, notes, folderId, saleType, order, nicknames. The dbItemId column is padded to 4 digits with a leading space (to keep Excel from stripping leading zeros). In JSON it’s a number.Everything runs in your browser. No uploads.