Here we are almost at the end of the very first month of 2025. While some on the internet are claiming that this January has been going on for 6 months, it felt like a breeze to me. How are we already in 2025 when 2020 was just a few months ago? I guess people weren’t lying when they said that time flies.
Back to January: It was a busy month for the team, the highlight of which was our quarterly review. We do this at the beginning of every new quarter, where every member writes down their current thoughts, the progress they made last quarter, the value their efforts added, and how conscious they were about the quality of it all. We then brainstormed with a few of our teammates and mentors to get feedback and make plans for the coming quarter.
This activity kept all of us engineers busy for a few days. The rest of the days, here is what we did…
Table of Content
Country Specific Chart of Accounts
ERPNext now has a Switzerland specific Chart of Accounts.
SYSCOHADA (Accounting System used by 17 African countries) compliant Chart of Accounts is also available.
More Configurable Reconciliation
Reconciliation of Advance Payments can now be configured to take effect on the date of reconciliation.
Process Payment Reconciliation - a semi-auto tool used to reconcile large volumes of unreconciled documents, can now be configured to run in different time intervals.
Miscellaneous
There are now company-level validations to prevent incorrect usage of dimensions across companies.
Add Corrective Operation Cost in Finished Good Valuation
The operating cost of corrective job cards will now be added to the additional costs table of Manufacture Stock Entry.
Newly created corrective job cards will now have a raw materials table pre-filled based on the job card it is being created from.
Validate Components and Qty as per BOM
If "Backflush Raw Materials Based On" is BOM, then users can validate components and component quantity according to BOM. To do that they have to enable the "Validate Components Quantities Per BOM" checkbox in the "Manufacturing Settings".
Stock Reservation for Work Order
The stock reservation for work orders, with support for serial and batch reservation, has been added to the develop branch and will be released in version 16. For more details check the documentation here.
Fix Negative Stock for Batch
If you have a negative stock for the batch, you can fix it by using stock reconciliation to adjust the batch quantity to zero.
Accurate Advance Claims
Advances that are already scheduled for salary deduction will no longer be included when creating claims against advances. This ensures that employees can only claim the amount that is actually available, preventing any miscalculations in advance allocations.
Gratuity
- Accurate Calculation: When "Calculate Gratuity Amount Based On" is set to "Sum of all previous slabs", employees with experience matching the upper limit of a slab will now correctly receive the applicable Gratuity Rule Slabs, ensuring accurate gratuity calculations.
Settlement via FnF: Gratuity status is automatically updated when settled via Full & Final Settlement.
Employee loan repayment
Pending loan repayments can be now settled through Full & Final Settlement upon an employee’s exit, creating repayment entries during F&F submission.
Salary Calculation
Salary slips now support timesheet-based calculations alongside payment days. Salary slips can now combine both payment days and timesheet-based calculations, allowing more flexibility, especially when timesheets are used to track overtime.
Prevent Self Leave Approval
Sometimes users who have leave approval role should not able to approve their own leaves. For this, a new HR settings is introduced that will prevent users with leave approval roles from approving their own leaves.
Minor Fixes
- If shift time configurations are changed while there still unmarked checkin logs, the newer logs inherit updated configuration while older logs will still have outdated shift times, which sometimes results in creating incorrect attendance records. Fetch shift in this case wouldn’t fetch new shift details, this is now fixed
- Attendance now will be marked on absent dates for default shift if another shift assignments exists. Know More
- Show appropriate alert if no shift is found on fetch shift. Know More
Database Analyzer
We have added a new developer tool that quickly analyzes your database, giving you a quick overview of your site's database performance and potential issues.
Key features:
- Displays detailed storage usage for all table data and indexes in your database, helping you understand space utilization.
- Show the active database processes, with the ability to terminate them when necessary.
- Identifies problematic SQL queries by highlighting:
- Slow queries
- Most time-consuming queries
- Queries doing a full table scan
- Provides index optimization by:
- Suggesting new indexes based on slow query logs
- Detecting unused or redundant indexes
Assignments are now a First Class Feature
Assignments as a feature were not as discoverable as before. Students were able to submit the assignment from the portal, but to add a new assignment, instructors had to go to the desk. With time, many of you started using this feature, and so I decided to make it first class.
Admins can now create or edit assignments right from the portal. They can also check and grade all the submissions. When you grade the assignment, the student will also receive a notification informing them that there has been an update in their submission.
Previously assignments could only be added to batches. You can now add them to the lessons of your course. For such lessons, a student will have to submit the assignment to complete the course.
Students Progress as a Heatmap
Many platforms show you a heatmap based on the activities you did each day. The purpose is to show you a pattern but it sometimes ends up being what motivates you to be consistent. GitHub does them well.
Students will now see a heatmap on the batches page that will be based on all the activities they did in the last 30 weeks. These activities include completing a lesson, submitting a quiz, or submitting an assignment. Instructors can see the same heatmap for each student of the batch from the student progress dialog.
Feedback for Batches
Feedback helps instructors improve and perform better next time. Students can now directly share their feedback from the batch page. They can share their feedback based on three parameters: Content, Instructors, and Value. If they have a very specific feedback to give, they can type the same in the Feedback field given.
Instructors see a list of feedback received along with the student's name. At the top of the list, they see the average rating received for each parameter for the batch.
Improvements to the Batch List
The Batches feature was introduced to the app around 1.5 years ago. Initially, when there were fewer batches the page worked well. But now with an increase in the number of batches, the page felt slow. To fix this, the entire page was refactored.
The page by default shows the first twenty upcoming pages, you can load more if you want to see them. You can switch tabs to see the enrolled or archived batches based on the role you have. You can also filter the list based on the title and category of the batch.
Knowledge Base refactor
I have been refactoring helpdesk for almost 4 months now, this month I decided to refactor the Knowledge Base. After the refactor, the design and structure of the Knowledge base for both agent and customer portal has been changed.
Agent Knowledge Base
The agent side of the Knowledge Base is focused on simplifying working with articles and categories. Here is a list of features:
- No subcategories, only one level of nesting which is Category => Articles.
- Create articles without setting any category. Articles created without any category go to the "General" category.
- Create, Read, Update or Delete an Article or a Category.
- On deletion of a category, all the articles from that category will move to the "General" category.
- Move articles from one category to another. (Note each category must have at least one article, to remove a category delete the category first and then move the articles from that)
- Merge Categories: if you want to merge 2 categories, click on the merge button and select the destination category. The source category will be deleted and all the articles from the source category will move to the target category.
- Copy public links for Articles & Categories for sharing the categories or articles to your customers.
- Bulk Actions: Bulk actions to move articles to a category & delete articles.
Customer Knowledge Base
The customer side of the Knowledge Base is focused on finding the relevant articles quickly and having easy navigation to find the articles with ease. Easily search articles through our Redis search powered search system.
Better Ticket Comments
Now, you can effortlessly attach files to your comments, making it simpler to share important information and context. Plus, with the option to edit your comments, you can quickly make adjustments or clarify your thoughts, ensuring that your communication is always clear and accurate.
Columns in Field Layout
While I was implementing the Grid Row layout using the field layout component I realised I was rendering columns as a grid (display: grid) and because of that there were many issues,
- I cannot have 4 fields in one column and 2 in the second column, because of the grid it gets equally arranged.
- All the fields take the same height, so if one column has Data → Check → Time field, the checkbox field’s height is the same as the data field’s height which doesn’t look good.
So I had to change the JSON structure of how the fields are arranged. And used flex to render columns similar to desk form layout.
Before:
[
{
label: 'Details',
sections: [
{
columns: 2,
fields: ['salutation', 'first_name', 'last_name', 'email', 'mobile_no'],
},
{ columns: 1, fields: ['status', 'lead_owner'] },
],
},
]
After:
[
{
label: 'Details',
sections: [
{
columns: [
{ fields: ['salutation', 'first_name', 'last_name'] },
{ fields: ['email', 'mobile_no'] },
],
},
{ columns: [{ fields: ['status', 'lead_owner'] }] },
],
},
]
Exotel Integration
We already have a Twilio Integration to make and receive calls in Frappe CRM, so why do we need another calling integration?
Twilio does not support calls from Indian numbers, which is a problem because Indian customers mostly ignore calls from international numbers. That’s why we needed Exotel Integration. Many in the community had also requested it.
Manually log calls
While testing Exotel Integration with Asif Mulani & Parth Garachh (Sales team members). Parth wanted to log some more details after the call has ended like what type of call was it (business related). Call log modal was designed to show specific fields only.
I extended the custom fields feature to call logs to solve this problem. Now you can add custom fields in the call log modal.
While implementing this why not allow manually log calls. I did receive a feature request for this. So now you can manually add call logs. Sometimes we get call directly from some customer for unknown reason which does get logged automatically to solve that problem implemented this.
Add/Edit note & task
We already had the feature to edit the note which was taken while agent was in the call. But there was no way to add note after the call has ended. So now I have added option to Add/Edit note as well as task in the call log modal
Frappe Builder continued to receive several stability and UX fixes to ensure every action works as expected. From refining small interactions like the radius handler to fixing the rendering of complex nested components, here are some key improvements that will enhance your usage experience:
Revert Changes
A crucial new feature, the "Revert Changes" option lets you roll back all changes to your last published state. Plus, the Unpublish button is now easier to access.
Preventing Accidental Loss of Code Changes
We received a couple of complaints about users accidentally losing code changes due to a refresh. Now, the editor will warn users about unsaved changes before refreshing to prevent this.
Unsaved Changes Indicator
A small dot indicator in the code editor now shows when there are unsaved changes.
Other UX Fixes
- Page previews now update correctly after publishing.
- Annoying dialogs no longer linger after navigating away. 😅
- Cut & Paste is here A small but much-needed feature—cut and paste is finally available!
Additionally, we’ve made some performance improvements, reducing scripting overhead for a faster and smoother editor load.
Check out the latest release changelog for more details!
1. Spaces
The structure of Teams and Projects felt too rigid. Everything was tied to a “Project,” but in the real world, not everything fits neatly into that box. Over the past two years of using Gameplan, we’ve often created “Projects” just to have a place to discuss random things.
Spaces are more open-ended and flexible, aligning better with how we actually use Gameplan.
You can browse public Spaces and join the ones that are relevant to you. From the Spaces page, you can view public, private, and archived Spaces. You can also rename, edit, merge, or categorize them.
To make navigation simpler, we’ve removed the Overview pages from Teams and Projects. These pages didn’t feel natural, didn’t add much value, and only created friction.
2. Sidebar
With the simplification of Spaces, your sidebar now only shows the Spaces you’ve joined, making it cleaner and more focused.
3. Home Feed
The Home Feed now has three tabs:
- Following: Discussions from Spaces you follow.
- Participating: Discussions you’ve created or participated in.
- All: Discussions from all public Spaces.
The feed remembers the last tab you were on, even after a refresh.
4. Discussions
- You can now see a content preview of the last post, whether it’s a comment or a poll.
- Pinned discussions appear at the top, unaffected by pagination.
- Several UX improvements, including:
- Better handling of “scroll to last unread comment” when opening a discussion.
- A “scroll to top” button on desktop.
- On mobile, tapping the title now scrolls to the top.
- You can now delete both comments and posts entirely (no soft deletion).
5. People
- UI spacing fixes and cleanup in the People and Profile pages.
- Bookmarks tab only shows up for your profile.
6. Pages
- Full-screen layout treatment for Pages.
- Auto save page content as you keep writing.
- Titles now appear at the bottom of the page card, with better handling for long titles.
7. Command Palette
- The first item stays focused as you type.
- Improved focus management.
- You can now create discussions, tasks, or pages directly.
- Shortcut hints are displayed.
8. Under the Hood changes
- Most components have been migrated to TypeScript. While I’m still learning, there’s some work to do in cleaning up the “red squigglies” and improving TypeScript code quality over time.
- The data layer has been completely refactored to use new data-fetching utilities: Frappe UI Data Fetching.
- Gameplan now uses API v2.
Note: The Spaces feature isn’t merged yet. If you’d like to test it, pull the feat-spaces branch.
Gameplan is all about writing and discussions, and we hope these updates keep the focus while reducing clutter and unnecessary friction ✌🏼
We’re working on launching Drive in v1 by the end of February. This will be a total revamp. This month, support has been added for “teams”. You no longer have to share every file with your teammates - now, you and your team can have a shared common folder, with fine-grained access in your control.
We've also solved many other minor UX issues and added two notable features: keyboard shortcuts and bulk actions on files. The list view has also been significantly improved, with more information and improved responsiveness.
Note: these features aren’t merged yet. If you’d like to test them, pull the v0.1 branch.
Gantt v1 was finally released this month - read more about it here.
And thats it 👋
That was all the team did in January. Next week is Frappeverse Africa 2025, and some of our teammates will be in Nairobi for a few days. Right before the conference, we are conducting a crash course on Frappe Framework and Frappe HR. Do register if you haven't already ✌️. See you next month!