Skip to content

Commit eeb71d4

Browse files
committed
Complete blibli.com post
1 parent ad4fe14 commit eeb71d4

4 files changed

Lines changed: 120 additions & 4 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
title: Splitwise Expense Creation tool
3+
slug: bulk-expense-splitwise
4+
heroImage:
5+
description: >-
6+
A small tool to create placeholder expense records on Splitwise.
7+
tags:
8+
- project
9+
- nodejs
10+
- react
11+
- productivity
12+
added: "September 30, 2025"
13+
updated: "October 1, 2025"
14+
hidden: false
15+
---
16+
17+
Here is another quick weekend project.
18+
19+
Following my [extension](/blog/itemize-receipts) to automate filling receipts, I realized that to tackle a backlog of 80 receipts, I needed to create 80 expenses.
20+
Splitwise currently limits the number of expenses you can create in one day to 5.
21+
So I did a little testing to see if I can create the expenses every night as midnight rolls over using a scheduled job.
22+
23+
But what I found was that there was no limit on how many expenses I could create using the API.
24+
This sounds like a major oversight or a scrappy frontend implementation of the free tier restriction.
25+
Either way, it works out great for me.
26+
27+
![Input form selecting group and number of expenses to create](https://tgq565ix1n.ufs.sh/f/ck6yA5hy4GoxKjiBH8TbehQHPYNzwW7l3VkZj81LtnGrSa4d)
28+
29+
# Privacy
30+
31+
- This is in no way affliated with Splitwise. I am a third-party.
32+
- None of the services I offer or plan to offer will be monetized.
33+
- I do not store or log your information.
34+
- Any and all data you see flows directly between your browser and their servers.
35+
36+
# How to use
37+
38+
You'll need to set up a new app to get your credentials.
39+
40+
- Navigate to https://secure.splitwise.com/oauth_clients and log in.
41+
- Select "Register your application".
42+
- Fill in the required fields of the form.
43+
| Form input | Recommended value |
44+
|-------------------------|---------------------------|
45+
| Application Name | Enqueue Splitwise |
46+
| Application Description | Created by vivekraman.dev |
47+
| Homepage URL | https://vivekraman.dev |
48+
- Select "Register and get API key".
49+
- You should see your Consumer Key and Consumer Secret values.
50+
Use these to log in to my app.
51+
- Pick a group to create the expenses in.
52+
I created a group just for this app, because you can edit the expense and move it to any group that needs it.
53+
- Pick the number of records you'd like.
54+
It's capped at 50, but go easy.
55+
- It'll need to wait one second between each creation, so be patient.
56+
- You're all set! If you can't see them on an empty or settled group, you'll find the expenses under "Show settled expenses".
57+
58+
# Dear Splitwise,
59+
60+
If you're somebody at Splitwise reading this, hire me and I'll fix your bugs.
61+
I have other ways of getting around limitations and ways to defend against them as well.
62+
See me not as a threat but as an opportunity.
63+
Much love!

content/posts/work-blibli.mdx

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ tags:
1212
- gcp
1313
- unity
1414
added: "June 14, 2024"
15-
updated: "June 31, 2025"
15+
updated: "September 30, 2025"
1616
---
1717

1818
import TechLogo from "../../src/components/TechLogo.astro";
@@ -21,7 +21,7 @@ In the final semester of my undergraduate program, I secured an internship at Qu
2121
This expanded into a full-time software development engineer role after I graduated in August.
2222
In this post, I want to expand on some of the coolest things I worked on in blibli.com, and I'm hoping to showcase my process tackling complex requirements.
2323

24-
![An average day at Quinbay]()
24+
![An average day at Quinbay](https://tgq565ix1n.ufs.sh/f/ck6yA5hy4GoxB3ejo87bLeWn0QHTAX3Vl6EauD9swYMt17FN)
2525

2626
# The product
2727

@@ -41,6 +41,20 @@ They are then deployed via an <TechLogo name="nginx" /> nginx server.
4141

4242
# My contributions
4343

44+
## Seller fulfillment center revamp
45+
46+
The seller fulfillment center is a portal for sellers to manage their inventory and orders.
47+
The code was quite old and unmaintainable, so when the organization decided to take two months across the board to invest in clearing tech debt, we rewrote the entire fulfillment experience.
48+
49+
This project was handed to me along with a part of the team.
50+
- I worked with the project manager to understand and break down the various seller flows.
51+
- Then I distributed the tasks across my team, considering their bandwidth, availability, and inter-dependencies.
52+
- I worked on preparing and maintaining a framework for extensive documentation to ease communication between the tech leads, frontend developers, and API developers.
53+
- I organized API review sessions that squashed many gaps before development even started.
54+
- Since this project required the creation of one new microservice and a new micro-frontend for the seller experience, I worked with infra teams and the seller experience teams to learn, deploy, and integrate the services through our <TechLogo name="nginx" /> Nginx gateway.
55+
56+
This project spanned just over three months from planning to kickoff, and it was my first experience leading a team and taking ownership of my decisions.
57+
4458
## Customer order cancellation
4559

4660
My first big story in Blibli was to build the option for a customer to cancel their order.
@@ -57,3 +71,42 @@ However, this black box was a slow operation, and invoking it multiple times wou
5771

5872
After brainstorming with my lead, we decided that the simplest solution would be to defer the cancellation request to a background job, enqueueing the cancellation of each item via <TechLogo name="kafka" /> Kafka.
5973
The user would be informed that the cancellation was being processed, and they would receive a notification once it was complete.
74+
75+
## Stock reconciliation project
76+
77+
This was an incredibly large project that I played a key role in kickstarting.
78+
The warehouse data analysts observed that some items were being undersold, and narrowed the root cause to a disparity in stock numbers reported by the overall inventory system and the warehouse stock management system.
79+
80+
There were many steps taken to identify and mitigate this problem to a manageable level, while identifying the root cause of the disparity.
81+
It started with a collaboration across all of the inventory service clients to maintain and pass around a tracking ID during any stock transaction. This helped us identify specific stock journeys.
82+
83+
With that, we were able to analyze the data to uniquely tag each tracking ID and group all transactions based on them.
84+
Then, we tried to accumulate the stock changes in each group, which identified several clients as sources for the disparities.
85+
Working with these teams to spot and squash the bugs was a task that involved a lot of inter-team communication and timeline alignment.
86+
87+
While I was heavily involved in kickstarting this project, I took a back-step after the low-hanging fruit was addressed.
88+
I was still involved with communications and tracking progress as well as repairing the stock issues, for which I established a comprehensive SOP that was used by the team.
89+
90+
## Production stability
91+
92+
Over the 3+ years I worked at blibli.com, I worked on plenty of other challenging stories.
93+
I participated in war rooms and active standby for major sales events.
94+
95+
I worked on migrating the inventory codebase to <TechLogo name="spring" followColorScheme /> Spring Boot and <TechLogo name="java" followColorScheme /> Java 17, involving the migration of XML-defined bean mazes and aspect-oriented programming definitions into fully programmatic declarations.
96+
This also involved communication with the performance evaluation team to build a benchmark comparing old to new performance impact.
97+
We saw a performance improvement of around 50% and a huge improvement in throughput, which enabled us to scale back the service and cut down considerably on cloud costs.
98+
99+
There was an incredibly complex ingest process that we had to revamp.
100+
It was related to generating QR codes in bulk for sellers to display on their products in a store.
101+
This was a refreshing and challenging task, due to the constraints we had.
102+
The entire flow was orchestrated with <TechLogo name="kafka" /> Kafka as its backbone.
103+
104+
I also conducted interviews for a couple of intern cohorts, which was honestly a bit stressful until I got the hang of it.
105+
106+
# Conclusion
107+
108+
My time at blibli.com was incredibly enlightening and emboldened my confidence in my knowledge and wisdom.
109+
I am ever grateful for the oppotunity to lead and take ownership, to be able to make important decisions knowing that I had support from my seniors and peers, and to be given the space to fail and learn from mistakes.
110+
Thanks for everything, folks!
111+
112+
![All my colleagues at blibli.com](https://tgq565ix1n.ufs.sh/f/ck6yA5hy4Gox4am36CQJJMpmRjVxq2OHCIK7irGDec5QX3sh)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vivekraman.dev",
3-
"version": "3.4-rc1",
3+
"version": "3.5-rc1",
44
"private": true,
55
"scripts": {
66
"dev": "astro dev",

src/style/global.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ pre > code {
204204
blockquote {
205205
border: 1px solid var(--gray);
206206
color: var(--black);
207-
padding: .5rem 1rem;
207+
padding: 0.5rem 1rem;
208208
margin: 0px;
209209
font-style: italic;
210210
}

0 commit comments

Comments
 (0)