Saturday, November 1, 2025

To-do List Plugin: Template with Smart Refresh and a Calendar View

 A new Smart To-Do List Plugin template is now available — it includes a user controlled smart refresh drop-down and a calendar view to help you control refresh and visualize your tasks!


You can easily control the refresh and see which tasks are completed and which ones are upcoming in the next few days.

๐Ÿ›’ Get the template here: ๐Ÿ‘‰ https://ko-fi.com/s/5d3873c5de

Your purchase directly supports my work and helps me keep developing more features for you.



Tuesday, October 21, 2025

Thank You for Supporting SPCsoft Galaxy!

Since August 2022, I’ve been blessed to be able to create and publish Google Sheets add-ons  — simple tools I first built to make my own and my communities’ workflows easier. I never imagined they would grow this much, but over time they’ve reached far more people and communities than I expected. I’m deeply grateful to everyone who has supported my vision. Your feedback and encouragement continue to inspire me to keep improving and creating.

Among them, the To-do List Plugin, One Link Sign-up and Comfort Attendance have become the most popular, with around 7K+, 2K+ and 1K+ downloads so far. It’s been amazing to see how something that started as a personal vision could help so many others. Thank you to users who spare the time that they have saved from using my add-ons to give back their encouraging reviews on the Googe Marketplace


The add-on blog has reached 38K views from people around the world.



And most importantly, thank you to my nine supporters on Ko-fi who helped me reach 1% of my goal to keep Serving People and Communities moving forward. Every bit of financial support means a lot and keeps me motivated to continue building and sharing more tools that make everyday tasks a little easier.


I’ll keep learning, improving, and sharing what I build — and I hope these small projects continue to grow and help more people and communities along the way.




Saturday, October 18, 2025

To-do List Plugin - New Release Notice on Smart Refresh Pilot Testing

The To-do List plugin uses the onEdit trigger to refresh your to-do list. This trigger takes a few seconds to reach Google’s server before the refresh starts. During this short delay, you can continue making multiple updates to your tasks. However, you’ll need to wait for the refresh to complete before making further edits. It is not user friendly for bulk updates, you have to unplug and plug in which is also not convenient.

Because data transmission depends on Google Sheets’ network speed, there is currently no way to improve this delay. Therefore, a new Smart Refresh mode has been developed and is undergoing a pilot testing. Anyone who wants to join the pilot testing, please email spcsoft.solutions@gmail.com.


✨ What’s New

A. Dropdown to Control Refresh

A new refresh control dropdown has been added at the top of the task header which works for desktop browser and mobile app.

It has the following options:

1. ๐ŸŽฌ Refresh now

Informs the server to refresh.

2. Auto refresh

Automatically refreshes whenever an edit is received from the server.

3. Smart refresh

When an edit occurs, the task header will show:

  • Desktop: Refresh when idle for 20s. Select this cell to refresh now.

  • Mobile: Refresh when idle for 20s. Use the above dropdown to refresh now.

After 20 seconds of inactivity (idle):

  • Desktop: Idle detected – refresh in 10s! Select this cell to refresh or any cell to skip.

  • Mobile: Idle detected – refresh in 10s!

After 10 more seconds (30s total idle), the server will automatically start refreshing.

  • Desktop/Mobile: Refreshing ... update now not captured.

4. Manual refresh

The server will not refresh automatically — only when ๐ŸŽฌ Refresh now is selected.


B. Flexible to-do list location

You can now put your to-do list anywhere with other information that you are working on.


 



Tuesday, September 30, 2025

Pivot Expense Split: Posting Offline Transactions at Reconnection

Google Sheets mobile + offline mode + installable onEdit triggers is a known and tricky behavior. Here’s a breakdown of why offline to online sometimes get two triggers and sometimes none:

๐Ÿ” 1. Why it happens

a. Offline edits don’t fire any triggers immediately

When offline, the app records the edits locally; installable triggers (like onEdit(e)) only run on the server.

So while offline → no trigger.

b. When reconnecting

When the mobile app resyncs: 

  • Sometimes Google merges the edits into one sync event → fires one onEdit trigger per edited cell.
  • Sometimes it batches multiple cell changes → causing multiple triggers (e.g., one per cell).
  • Occasionally, the sync process is treated as a programmatic update (not user edit) → no onEdit at all.

This depends on:

  • How long the sheet stayed offline.
  • Whether the same range got multiple changes.
  • Connection stability and Google server sync timing.


๐Ÿงช 2. Observed patterns (tested behavior)

Scenario Offline duration Action                         Result

Short offline (few seconds) Small edit (1 cell)         Usually 1 onEdit

Long offline (many edits) Multiple cells                 Often no trigger or 2+ triggers

Reopen sheet after being         Edits in different areas    Sometimes fires all at once or none

fully closed offline

๐Ÿ•’ 3. When sync happens automatically

Offline edits made on the mobile app are synced when all of the following conditions are true:

1. Internet connection restored

  • The device must be connected to the internet (Wi-Fi or mobile data).
  • Sync typically starts within a few seconds to a few minutes after the connection stabilizes.
2. Google Sheets app is active or in background
  • The app must be open on the sheet, or at least allowed to run in the background.
  • If the app was closed or background activity is restricted (by battery saver, etc.), sync waits until the app is reopened.
3. Google account signed in & online
  • The account used for editing must still be logged in and authenticated.
  • If sign-in expired (common after long offline periods), sync waits until you reauthenticate.
4. No sync conflict

  • If someone else has also edited the same range while you were offline, Sheets may delay syncing until it resolves the conflict (which can cause the “Version conflict” prompt).
๐Ÿ”4. Implication for add-ons or triggers

Installable triggers like onEdit, onChange, or time-based triggers see the updates only after the sync upload completes.

That’s why offline edits sometimes trigger two onEdit events, or none at all, depending on how Google merges them when reconnecting.

⚙️5.  Pivot Expense Split Enhancement

Use an onChange(e) installable trigger which fires when the structure or content of the sheet changes, even after sync. It will trigger once per batch sync instead of per cell. The following is scripted to post offline input at reconnection.

function onChange(e) {

  if (e.changeType === 'EDIT') {

    // handle sync edits here

  }

}

⚠️ It doesn’t give e.range like onEdit — only that something changed. 

Wednesday, September 10, 2025

Pivot Expense Split: Posting Timeout

Previously, Pivot Expense Split relied on a simple Google onEdit trigger, which only runs for up to 30 seconds. That wasn’t enough to handle offline input when device came back online.


Now, Pivot Expense Split uses installable triggers for longer runtime and will create another triggers until all offline transactions are fully posted. This means you won’t have checkboxes remain in Input tab when back to online.

The use of installable trigger requires new permission which has been reviewed and approved by Google today. When you run the add-on, Google will prompt you the new permission for your authorization.


Wednesday, August 27, 2025

To-do List Plugin: Logging the Date When the User Checks the Box to Mark a Task as Done

Inside the TDL log, Google’s history records the date when a task was logged. For users who want to analyze trends, it is more useful to store this date in its own column. Therefore, the date when the user checks the box to mark a task as done is now added to the log.

Please update your TDL log header as follows:


Date – the original task date
Repeat On – the updated task date based on the frequency code
Completion – the date when the user checked the box to mark the task as done

Saturday, August 2, 2025

Comfort Attendance: Support for Multiple Attendance Statuses

You can configure custom statuses starting with the default Absent and Present. Additional statuses like Picked Up can be added to suit your needs.

Clicking a name will cycle through the statuses and loop back to the beginning. Alternatively, you can open a dropdown list to select a specific status.


You can fully customize the status code, label, color, and icon to fit your needs.

Each status has the following attributes, listed in quotes and separated by commas:

  • Valid code on the sheet

  • Label, color, and icon, which are displayed on the web app page for that status code



The web app will update Google attendance sheet and dashboard accordingly.




Setup instructions and details in Comfort Attendance Setup > Option 2.


Sunday, July 6, 2025

One Link Sign-up: Enhanced Web App Setup Flow

The Set Up Web App function has been enhanced to support both Automatic and Manual deployment options.

Automatic Deployment: Quickly deploy with default settings for a fast and hassle-free setup.

Manual Deployment: For technical users who want full control over deployment configurations.

This enhancement gives you flexibility to choose the method that best fits your needs.



Friday, July 4, 2025

Comfort Attendance: Enhanced the Web App Setup Flow

The Set Up Web App function has been enhanced to support both Automatic and Manual deployment options.

Automatic Deployment: Quickly deploy with default settings for a fast and hassle-free setup.

Manual Deployment: For technical users who want full control over deployment configurations.

This enhancement gives you flexibility to choose the method that best fits your needs.




Tuesday, June 10, 2025

To-do List Plugin: Supports the "Format → Convert to Table" Feature

๐Ÿ†• To-do List Plugin Now Supports the "Format → Convert to Table" Feature

The plugin now works seamlessly with Google Sheets' "Convert to table" format.

  • You can add a new table row by clicking the ➕ icon.

  • As a result, an extra blank row is no longer required.

  • If you prefer not to have a blank row automatically inserted, simply uncheck "Insert task when blank is filled" in the configuration sidebar below.


Friday, June 6, 2025

To-do List Plugin: Template with a Calendar View

A new To-Do List Plugin template is now available — it includes a calendar view to help you visualize your tasks!

You can easily see which tasks are completed and which ones are upcoming in the next few days.

๐Ÿ›’ Get the template here: ๐Ÿ‘‰ https://ko-fi.com/s/221bf4dca6

Your purchase directly supports my work and helps me keep developing more features for you.








Sunday, May 11, 2025

To-do List Plugin: New User Preferences

Configuration has been enhanced to support user preferences.


If "Move completed task to log sheet" is checked, completed tasks will automatically be transferred to the log sheet.


Thursday, May 1, 2025

One Link Sign-up: Potluck Sign-up Customization Steps

One Link Sign-up web application retrieves data based on column letters defined in the configuration. Therefore, all column header names can be customized. Please follow the steps below to set up the potluck sign-up web app:

1. Update Your Sheet Name

    The sheet name (e.g., Potluck Sign-up Example) will be shown in:


    and all page titles within the web app

2. Define Sign-Up (Sign-up Tab)

    Use the Sign-up tab to specify the potluck sign-ups.


    Required Columns:
  • Date: Date and time of the potluck (multiple potlucks can be created)

  • Dish: Name of disk

  • Sign-up: This field is automatically updated by the web app when people sign up

  • I will bring: This is a customizable column—delete or add to collect additional information during sign up. All columns will be shown in the sign-up page.         

 3. Define Potluck Dish Details (Item Tab)

    Use the Item tab to provide the potluck dish details.    

    
      Required Columns:
  • Item: Must match the Dish name in the Sign-up tab in order to provide the details to sign-up.

  • Needed: Number of the dishes needed. If blank, only one will be displayed for sign up.

  • Contact ID: Email address of the potluck host. Host view via the “Set up web app” function will ensure the sign-on user which has Email address defined in this column can access.

  • Input (optional): Specify what fields are displayed for people to input during sign up. This column must be defined in the configuration. If no input field, the input column in configuration must be blank.

  • Contact: Name of the potluck host

4. Set Up Signer Information (Signer Tab)

    Update the Signer tab to define the information required from people signing up.
    


   Required Columns:
  • ID: Email address of the signer (used to access the web app)

  • Name: Name of the signer (entered during sign-up)

  • Mobile No.: This is a customizable field—add or rename fields to collect additional information. All columns will be shown in the sign-up page.



5. Configure the Web App

Go to Extensions > One Link Sign-up > Configure web app to set up and customize the web app configuration.


    Field Definitions:

  • Sheet names: Names of the sheets (tabs) in your sign-up spreadsheet

  • Columns: Column letters corresponding to data fields in the Sign-up, Item and Signer tabs

  • Delimiter in view definition: Delimiter used to separate column headers in different views and the optional input sign-up fields (e.g., ;)

  • Host view: Columns displayed in the host view (e.g., Date;Item;Name;I will bring;ID;Mobile No.;Contact)        


  • Sign-up view: Columns shown to users when signing up (e.g., Date;Item;Name;I will bring;Food allegies;Contact)

Tuesday, April 8, 2025

One Link Sign-up: Event Sign-up Customization Steps

One Link Sign-up web application retrieves data based on column letters defined in the configuration. Therefore, all column header names can be customized. Please follow the steps below to set up the event sign-up web app:

1. Update Your Sheet Name


    The sheet name (e.g., Event Sign-up Example) will be shown in:
    and all page titles within the web app

2. Define Sign-Ups (Sign-up Tab)

    Use the Sign-up tab to specify when and how often each post is available.


    Required Columns:

  • Date: Date and time the post is available (multiple entries can be created for the same post)

  • Post: Name of the post. Details will be defined in the Post tab.

  • Sign-up: This field is automatically updated by the web app when users sign up

3. Define Available Posts (Post Tab)

    Use the Post tab to list the roles or tasks details.    

    


      Required Columns:
  • Post: The name of the post (must match the name used in the Sign-up tab)

  • No. of hours: Duration of the post. Default is 1 hour

  • No. of slots: Number of available sign-up slots for the post

  • Contact ID: Email address of the post host. This is used to access the host view via the “Set up web app” function

  • Contact: Name of the post host

4. Set Up Signer Information (Signer Tab)

    Update the Signer tab to define the information required from individuals signing up.
    
    

   Required Columns:
  • ID: Email address of the signer (used to access the web app)

  • Name: Name of the signer (entered during sign-up)

  • Mobile No.: This is a customizable field—add or rename fields to collect additional information. All columns will be shown in the sign-up page.


5. Configure the Web App

    Go to Extensions > One Link Sign-up > Configure web app to set up and customize the web app configuration.


    Field Definitions:

  • Sheet names: Names of the sheets (tabs) in your sign-up spreadsheet

  • Columns: Column letters corresponding to data fields in the Post, Sign-up, and Signer tabs

  • Delimiter in view definition: Delimiter used to separate column headers in different views (e.g., ;)

  • Host view: Columns displayed in the host view (e.g., Date;Post;Name;ID;Mobile No.;Contact)

        
  • Sign-up view: Columns shown to users when signing up (e.g., Date;Post;Contact)
        

  • One Link Sign-up allows host to select posts when generating the sign-up page for each team. 
        
  • Team view defines columns visible to teams (e.g., Date;Post;Name;Contact)
        
  • x day intra: Shows sign-ups within the team for the next x days

  • x day inter: Displays cross-team sign-ups for coordination in the next x days










Sunday, April 6, 2025

One Link Sign-up: Support for Sign-in from Any Email Address

People without Google accounts can now access the One Link Sign-up.

For new installations, the native script authorization will include the "Send mail as you" permission. If this permission is granted, users will see a sign-in page below in the web app where they can enter their email address to receive a password-free access link.




If the host does not authorize the "Send mail as you" permission during web app setup, users will not see the password-free sign-in option.

If the host wants to enable this feature and allow email access, they can follow the steps below to grant the necessary permission:

1. Open the user sheet, go to Extension > Apps Scipt.

2. Go to Deploy > Manage deployments

3. Click the edit icon which will enable the deploy button below:

4. Click the Deploy button.
5. Click the Authorize access button
6. As in previous web app authorization, go through the steps from Choose an account > Advanced > Go to {your sheet name} (unsafe) > Continue > Allow.

7. Click the Done button and close the Apps Script page. People can now enter their email address to receive a password-free access link.