Learn how to build a globally diversified portfolio from India. 7 of 12 chapters are live, covering LRS, FX, global indexes, and Irish ETFs.
Eventful Investment
This month’s investment journey was more eventful than usual. The ideal is simple — salary day is investment day — and I wanted July 31 to be the day everything got planned, executed, and closed out, same as any other month. Instead, this cycle ran into enormous execution friction. My usual fast, efficient route — FX Retail via BHIM/Bharat Connect on my ICICI account — failed outright, and the support chain across BHIM, ICICI, and FX Retail took 11 days to actually resolve it. That failure reshaped the entire investment plan. Here’s how it played out:
| Date | Event |
|---|---|
| Jul 31 | Investment planned; salary credited in the morning. Attempted FX Retail via BHIM — it failed, and the amount went under lien. Full incident account → |
| Aug 7 | Lien still unresolved — went ahead and executed the domestic leg (Nifty 50, Midcap 150) rather than wait any longer. |
| Aug 10 | Lien finally released. |
| Aug 11–12 | Manual LRS remittance via Bank of Baroda. |
| Aug 13 | Bought ANAU, completing the international leg. |
What should have simply wrapped up on July 31 took two weeks to complete — all because of one failed FX Retail booking via BHIM.
I am publishing two portfolio reports:
| Report | Frequency | Purpose |
|---|---|---|
| State of the Portfolio | Annual (April) | Comprehensive yearly review of performance, allocation and strategy. |
| State of the 1 Portfolio | Monthly (Except April) | Regular portfolio updates covering returns, allocation, learnings and improvements |
The 1 Portfolio represents the core long-term wealth portfolio, excluding the Emergency and Travel funds.
1 Portfolio — Snapshot
This report uses prices as on end of August 6.
| Portfolio Strategy | Global Multi-Asset Passive Investing using Indian Mutual Funds & Irish ETFs | |||
| Equity Allocation | Target (2026-27) 85.00% (unchanged) | Current 83.05% ▲ 83.03% | India 44.39% ▲ 43.81% | US 38.66% ▼ 39.22% |
| 1 Portfolio | XIRR 19.00% ▼ 20.34% | Drift 1.94% ▼ 1.97% | New Investment 1.61% ▼ 2.22% | |
| Rebalancing Method | Perpetual Rebalancing | |||
Portfolio XIRR eased from 20.34% to 19.00%, tracking a softer month for the Nasdaq 100 (37.49% → 34.51%). Nifty 50 improved (3.72% → 5.39%) but remains the primary laggard. Gold was the standout, its XIRR rising to 36.02% and its growth-share jumping to 21.69% (from 20.35%) — the biggest capital-efficiency multiple in the portfolio.
1 Portfolio — Performance & Drift
Following is the state of the 1 Portfolio, before this month’s investment. Data is compared to the previous State of the 1 Portfolio (July 2026) report, which was likewise published pre-investment — so this is a like-for-like comparison.
| Asset Class | Age | XIRR | Growth Share | Current Allocation (Aug 6 EOD) | Target Allocation (for TY 2026-27) | Drift |
|---|---|---|---|---|---|---|
| Nasdaq 100 | 4y 1m | 34.51% ▼ 37.49% | 55.33% ▼ 61.39% | 38.66% ▼ 39.22% | 40.00% | -1.34% ▼ -0.78% |
| Nifty 50 | 4y 1m | 5.39% ▲ 3.72% | 7.17% ▲ 4.88% | 19.95% ▲ 19.91% | 20.00% | -0.05% ▲ -0.09% |
| Next 50 | 1y 1m | 32.45% ▲ 28.21% | 4.87% ▲ 3.53% | 9.87% ▲ 9.50% | 10.00% | -0.13% ▲ -0.50% |
| Midcap 150 | 1y 1m | 26.25% ▲ 26.05% | 4.06% ▲ 3.35% | 9.71% ▲ 9.51% | 10.00% | -0.29% ▲ -0.49% |
| Smallcap 250 | 1y 1m | 47.08% ▼ 48.03% | 3.20% ▲ 2.68% | 4.86% ▼ 4.89% | 5.00% | -0.14% ▼ -0.11% |
| Debt | 4y 1m | 7.79% ▼ 8.00% | 3.68% ▼ 3.81% | 5.91% ▼ 6.13% | 5.00% | +0.91% ▼ +1.13% |
| Gold | 4y 1m | 36.02% ▲ 34.40% | 21.69% ▲ 20.35% | 11.04% ▲ 10.84% | 10.00% | +1.04% ▲ +0.84% |
| Total | 19.00% ▼ 20.34% | 100.00% | 100.00% | 100.00% | +1.94% ▼ +1.97% |
Definitions
- Asset Class: Underlying asset class within the 1 Portfolio.
- XIRR: Annualized return generated by investments in the asset class.
- Growth Share: Percentage of total portfolio gains contributed by the asset class.
- Current Allocation: Current percentage of portfolio market value allocated to the asset class.
- Target Allocation: Desired long-term allocation for the asset class.
- Drift: Difference between current allocation and target allocation (positive = overweight, negative = underweight).
- Total Drift: Calculated as the sum of positive deviations from target allocations. A higher drift indicates the portfolio is further away from its target allocation. Conceptually, it represents the minimum percentage of portfolio value that would need to be shifted between asset classes to reach the target allocation precisely (ignoring taxes, transaction costs, and other practical constraints).
- Capital-Efficiency Multiple: Growth Share ÷ Current Allocation. A ratio above 1 means the asset is contributing more to portfolio growth than its size alone would suggest.
{
"title": [
{ "text": "1 Portfolio Performance", "left": "center", "top": 0, "textStyle": { "color": "#2c3e50", "fontSize": 16, "fontWeight": 600 } },
{ "text": "Market Value", "left": "center", "top": "37%", "textStyle": { "fontSize": 15, "fontWeight": 600, "color": "#444" } },
{ "text": "Growth Share", "left": "center", "top": "57%", "textStyle": { "fontSize": 15, "fontWeight": 600, "color": "#444" } }
],
"tooltip": { "trigger": "item" },
"color": ["#2563EB", "#F97316", "#F59E0B", "#10B981", "#047857", "#64748B", "#D4AF37"],
"legend": {
"bottom": 0, "left": "center", "orient": "horizontal",
"data": ["Nasdaq 100", "Nifty 50", "Next 50", "Midcap 150", "Smallcap 250", "Debt", "Gold"]
},
"series": [
{
"name": "Growth Contribution",
"type": "pie",
"radius": ["36%", "58%"],
"center": ["50%", "52%"],
"startAngle": 180,
"clockwise": false,
"label": { "show": true, "position": "outside", "formatter": "{b} ({c}%)" },
"data": [
{ "name": "Nasdaq 100", "value": 55.33 },
{ "name": "Nifty 50", "value": 7.17 },
{ "name": "Next 50", "value": 4.87 },
{ "name": "Midcap 150", "value": 4.06 },
{ "name": "Smallcap 250", "value": 3.20 },
{ "name": "Debt", "value": 3.68 },
{ "name": "Gold", "value": 21.69 },
{ "name": "__placeholder__", "value": 99.99, "itemStyle": { "color": "transparent" }, "label": { "show": false }, "tooltip": { "show": false }, "labelLine": { "show": false } }
]
},
{
"name": "Market Value Allocation",
"type": "pie",
"radius": ["36%", "58%"],
"center": ["50%", "48%"],
"startAngle": 180,
"clockwise": true,
"label": { "show": true, "position": "outside", "formatter": "{b} ({c}%)" },
"data": [
{ "name": "Nasdaq 100", "value": 38.66 },
{ "name": "Nifty 50", "value": 19.95 },
{ "name": "Next 50", "value": 9.87 },
{ "name": "Midcap 150", "value": 9.71 },
{ "name": "Smallcap 250", "value": 4.86 },
{ "name": "Debt", "value": 5.91 },
{ "name": "Gold", "value": 11.04 },
{ "name": "__placeholder__", "value": 100.00, "itemStyle": { "color": "transparent" }, "label": { "show": false }, "tooltip": { "show": false }, "labelLine": { "show": false } }
]
}
],
"toolbox": {
"show": true,
"feature": {
"saveAsImage": {
"title": "Download Chart",
"show": true
}
}
}
}{
"title": { "text": "1 Portfolio Drift", "left": "center", "top": 0, "textStyle": { "color": "#2c3e50", "fontSize": 16, "fontWeight": 600 } },
"tooltip": { "trigger": "axis", "axisPointer": { "type": "shadow" } },
"grid": { "left": "15%", "right": "15%", "bottom": "10%", "top": "16%", "containLabel": true },
"xAxis": { "type": "value", "name": "Drift %", "nameLocation": "middle", "nameGap": 30 },
"yAxis": { "type": "category", "data": ["Gold", "Debt", "Smallcap 250", "Midcap 150", "Next 50", "Nifty 50", "Nasdaq 100"] },
"series": [
{
"name": "Drift",
"type": "bar",
"label": { "show": true, "formatter": "{c}%" },
"data": [
{ "value": 1.04, "itemStyle": { "color": "#D4AF37" }, "label": { "position": "left" } },
{ "value": 0.91, "itemStyle": { "color": "#64748B" }, "label": { "position": "left" } },
{ "value": -0.14, "itemStyle": { "color": "#047857" }, "label": { "position": "right" } },
{ "value": -0.29, "itemStyle": { "color": "#10B981" }, "label": { "position": "right" } },
{ "value": -0.13, "itemStyle": { "color": "#F59E0B" }, "label": { "position": "right" } },
{ "value": -0.05, "itemStyle": { "color": "#F97316" }, "label": { "position": "right" } },
{ "value": -1.34, "itemStyle": { "color": "#2563EB" }, "label": { "position": "right" } }
]
}
],
"toolbox": {
"show": true,
"feature": {
"saveAsImage": {
"title": "Download Chart",
"show": true
}
}
}
}Performance & Drift Observations
- Nasdaq 100’s Drift Widens Sharply: This is the standout move of the month. Nasdaq 100’s drift fell from -0.78% to -1.34%, by far the largest shift in the table. With XIRR cooling (37.49% → 34.51%) and Nasdaq’s own share of the portfolio growing slower than target, the usual monthly top-up didn’t arrive on schedule — the FX Retail failure that blocked the planned July 31 investment let this underweight gap widen further than a normal month would. This is a direct, measurable impact of that delay.
- Gold Extends Its Lead: Gold’s XIRR rose to 36.02% (from 34.40%) and its growth-share contribution jumped to 21.69% (from 20.35%) — the biggest capital-efficiency multiple in the portfolio. Its drift also widened further into overweight territory, from +0.84% to +1.04%.
- Domestic Equity Broadly Improved: Nifty 50, Next 50, Midcap 150 all saw both XIRR and drift improve — Nifty 50’s drift in particular tightened from -0.09% to -0.05%, now the closest to target of any asset class.
- Total Drift Roughly Flat: Total portfolio drift is essentially unchanged, 1.94% (from 1.97%) — but that stability masks a lot of movement underneath: Nasdaq’s drift got much worse while the domestic equity sleeve broadly improved, roughly offsetting each other.
In a global multi asset portfolio, performance leadership rotates continuously. The objective is not to predict the next winner, but to systematically direct new capital toward assets that have become underweight relative to their target allocation.
Drift Correction aka Monthly Investment
The table below consolidates the pre-investment state (Aug 6 EOD prices), the monthly investment allocation, and the planned post-investment state:
| Asset Class | Current | Pre Drift | New Invest | Post Invest | Post Drift | Target |
|---|---|---|---|---|---|---|
| Nasdaq 100 | 38.66% | -1.34% | 85.02% | 39.40% | -0.60% | 40.00% |
| Nifty 50 | 19.95% | -0.05% | 4.87% | 19.71% | -0.29% | 20.00% |
| Next 50 | 9.87% | -0.13% | 0.00% | 9.72% | -0.28% | 10.00% |
| Midcap 150 | 9.71% | -0.29% | 10.11% | 9.71% | -0.29% | 10.00% |
| Smallcap 250 | 4.86% | -0.14% | 0.00% | 4.79% | -0.21% | 5.00% |
| Debt | 5.91% | +0.91% | 0.00% | 5.81% | +0.81% | 5.00% |
| Gold | 11.04% | +1.04% | 0.00% | 10.86% | +0.86% | 10.00% |
| Total | 100.00% | 1.94% | 100.00% | 100.00% | 1.68% | 100.00% |
A new allocation of 1.61% of the pre-investment portfolio was planned to result in a drift correction of 0.26% (from 1.94% to 1.68%).
Definitions
- Asset Class: Underlying asset class part of the 1 Portfolio
- Current: Portfolio allocation before new investment (as of Aug 7 plan date)
- Pre Drift: Deviation from target at plan time (sum of positive values = total drift)
- New Invest: Percentage of this month’s investment directed to each asset class
- Post Invest: Estimated allocation after the investment
- Post Drift: Estimated drift after investment
- Target: Target allocation for the asset class
- Total Drift: Drift is calculated as the sum of positive deviations from target allocations
This chart shows how this month’s new investment moves each asset’s drift closer to — or, for Debt and Gold, further from — its target line.
{
"height": "700px",
"title": { "text": "Drift Correction aka Monthly Investment", "left": "center" },
"tooltip": { "trigger": "axis", "axisPointer": { "type": "shadow" } },
"legend": {
"data": ["Pre Drift", "Post Drift", "Improvement", "Improvement (Evaporated)", "Worsening", "New Water Level"],
"bottom": 0
},
"toolbox": {
"show": true,
"feature": {
"saveAsImage": {
"title": "Download Chart",
"show": true
}
}
},
"grid": { "left": "3%", "right": "4%", "bottom": "15%", "containLabel": true },
"xAxis": {
"type": "category",
"data": ["Nasdaq 100", "Nifty 50", "Next 50", "Midcap 150", "Smallcap 250", "Debt", "Gold"],
"axisLabel": { "interval": 0, "rotate": 30 }
},
"yAxis": {
"type": "value",
"name": "Drift (%)",
"min": -1.5,
"max": 1.25,
"axisLabel": { "formatter": "{value}%" }
},
"series": [
{ "name": "Pre Drift", "type": "bar", "data": [], "itemStyle": { "color": "#3b82f6" } },
{ "name": "Post Drift", "type": "bar", "data": [], "itemStyle": { "color": "#1e40af" } },
{ "name": "Improvement", "type": "bar", "data": [], "itemStyle": { "color": "#22c55e" } },
{ "name": "Improvement (Evaporated)", "type": "bar", "data": [], "itemStyle": { "color": "#22c55e", "opacity": 0.4, "decal": { "symbol": "rect", "color": "rgba(0,0,0,0.2)", "dashArrayX": [1, 0], "dashArrayY": [2, 4], "rotation": 0.785 } } },
{ "name": "Worsening", "type": "bar", "data": [], "itemStyle": { "color": "#ef4444", "opacity": 0.4, "decal": { "symbol": "rect", "color": "rgba(0,0,0,0.2)", "dashArrayX": [1, 0], "dashArrayY": [2, 4], "rotation": 0.785 } } },
{
"name": "New Water Level",
"type": "line",
"data": [],
"itemStyle": { "color": "#1e40af" },
"lineStyle": { "type": "dashed", "color": "#1e40af", "width": 2 },
"markLine": {
"symbol": "none",
"silent": true,
"label": { "show": false },
"lineStyle": { "type": "dashed", "color": "#1e40af", "width": 2 },
"data": [
{ "yAxis": -0.29 }
]
}
},
{
"name": "Empty",
"type": "bar",
"barWidth": "70%",
"stack": "main",
"data": [-0.60, -0.05, -0.13, -0.29, -0.14, 0, 0],
"itemStyle": { "color": "transparent" },
"tooltip": { "show": false }
},
{
"name": "Neg Delta",
"type": "bar",
"barWidth": "70%",
"stack": "main",
"data": [
{ "value": -0.74, "itemStyle": { "color": "#22c55e" } },
{ "value": -0.24, "itemStyle": { "color": "#ef4444", "opacity": 0.4, "decal": { "symbol": "rect", "color": "rgba(0,0,0,0.2)", "dashArrayX": [1, 0], "dashArrayY": [2, 4], "rotation": 0.785 } } },
{ "value": -0.15, "itemStyle": { "color": "#ef4444", "opacity": 0.4, "decal": { "symbol": "rect", "color": "rgba(0,0,0,0.2)", "dashArrayX": [1, 0], "dashArrayY": [2, 4], "rotation": 0.785 } } },
{ "value": -0.01, "itemStyle": { "color": "#22c55e" } },
{ "value": -0.07, "itemStyle": { "color": "#ef4444", "opacity": 0.4, "decal": { "symbol": "rect", "color": "rgba(0,0,0,0.2)", "dashArrayX": [1, 0], "dashArrayY": [2, 4], "rotation": 0.785 } } },
0, 0
],
"tooltip": { "show": false }
},
{
"name": "Neg Base",
"type": "bar",
"barWidth": "70%",
"stack": "main",
"data": [
{ "value": -0.16, "itemStyle": { "color": "#3b82f6" } },
{ "value": -1.21, "itemStyle": { "color": "#1e40af" } },
{ "value": -1.22, "itemStyle": { "color": "#1e40af" } },
{ "value": -1.21, "itemStyle": { "color": "#3b82f6" } },
{ "value": -1.29, "itemStyle": { "color": "#1e40af" } },
{ "value": -1.5, "itemStyle": { "color": "#1e40af" } },
{ "value": -1.5, "itemStyle": { "color": "#1e40af" } }
],
"tooltip": { "show": false }
},
{
"name": "Pos Base",
"type": "bar",
"barWidth": "70%",
"stack": "main",
"data": [
0, 0, 0, 0, 0,
{ "value": 0.81, "itemStyle": { "color": "#1e40af" } },
{ "value": 0.86, "itemStyle": { "color": "#1e40af" } }
],
"tooltip": { "show": false }
},
{
"name": "Pos Delta",
"type": "bar",
"barWidth": "70%",
"stack": "main",
"data": [
0, 0, 0, 0, 0,
{ "value": 0.10, "itemStyle": { "color": "#22c55e", "opacity": 0.4, "decal": { "symbol": "rect", "color": "rgba(0,0,0,0.2)", "dashArrayX": [1, 0], "dashArrayY": [2, 4], "rotation": 0.785 } } },
{ "value": 0.18, "itemStyle": { "color": "#22c55e", "opacity": 0.4, "decal": { "symbol": "rect", "color": "rgba(0,0,0,0.2)", "dashArrayX": [1, 0], "dashArrayY": [2, 4], "rotation": 0.785 } } }
],
"tooltip": { "show": false }
},
{
"name": "Pre Drift",
"type": "line",
"data": [-1.34, -0.05, -0.13, -0.29, -0.14, 0.91, 1.04],
"itemStyle": { "color": "#3b82f6" },
"lineStyle": { "opacity": 0 },
"symbol": "none"
},
{
"name": "Post Drift",
"type": "line",
"data": [-0.60, -0.29, -0.28, -0.29, -0.21, 0.81, 0.86],
"itemStyle": { "color": "#1e40af" },
"lineStyle": { "opacity": 0 },
"symbol": "none"
},
{
"name": "Improvement",
"type": "line",
"data": [0.74, "-", "-", 0.01, "-", 0.10, 0.18],
"itemStyle": { "color": "#22c55e" },
"lineStyle": { "opacity": 0 },
"symbol": "none"
},
{
"name": "Worsening",
"type": "line",
"data": ["-", 0.24, 0.15, "-", 0.07, "-", "-"],
"itemStyle": { "color": "#ef4444" },
"lineStyle": { "opacity": 0 },
"symbol": "none"
}
]
}The new water level (domestic pool) is computed using the Forward Water-Filling approach. Capital is distributed across underweight domestic assets to raise their drift up to this line. Nasdaq 100 was funded entirely from the international-only allocation, so it isn’t part of this domestic water-filling pool.
- Moving towards 0 is improvement and moving away from 0 is worsening.
- Improvement (Evaporated), for Debt and Gold, isn’t new capital correcting the overweight — it’s the natural dilution of their share as the rest of the portfolio grows, since they received zero new investment this cycle.
- Post Drift = Pre Drift + Improvement for Nasdaq 100 and Midcap 150
- Pre Drift = Post Drift + Improvement(Evaporated) for Debt and Gold
- Pre Drift = Post Drift + Worsening for Nifty 50, Next 50 and Smallcap 250
Key Observations from this month’s allocation
- Nasdaq 100 receives 85.02% of the new investment. With a -1.34% pre-drift, it was by far the most underweight asset class at plan time, so it absorbs the bulk of fresh capital — cutting its drift to -0.60%.
- Midcap 150 (10.11%) and Nifty 50 (4.87%) receive the remainder. Next 50 and Smallcap 250 receive no allocation this cycle.
- Debt and Gold receive zero — both remain overweight. With no fresh capital directed to them, their share is gradually diluted as the portfolio grows: Debt’s drift eases from +0.91% to +0.81%, Gold’s from +1.04% to +0.86%.
- Despite receiving new investment, Nifty 50’s drift still widens slightly (-0.05% → -0.29%) — its top-up (0.39% of its own value) grew slower than the ~1.6% overall portfolio growth from this cycle’s investment, so its relative share still slipped. This is an effect of the water-filling algorithm: it raises assets only up to the new water level, and Nifty 50 was already closest to target, so it received just enough to reach that line rather than enough to keep pace with overall portfolio growth.
Because the Nasdaq 100 leg landed six days later than planned (Aug 13 vs. the Aug 7 plan), the actual post-investment drift came in a touch higher than projected — 1.73% against a planned 1.68%.
Investment Stack
| Tool | Region | Type | Purpose |
|---|---|---|---|
| MF Central | India | Execution | Execution of Buy/Sell for Indian Mutual Funds directly with KRA agencies (no third party). |
| CAMS Online | India | Reporting | Generating the combined reporting (CAS) which is imported into RealValue Portfolio. |
| Interactive Brokers (IBKR) | International | Execution & Reporting | Execution and data source for Irish ETF tracking. Read The Global Indian Investor Chapter 6: What to Buy - Irish ETFs vs US ETFs |
| FX Retail + Bank of Baroda | International | Execution | Sending money from Indian bank account to US broker account (INR to USD), routed via Bank of Baroda’s branch-assisted FX Retail flow this month after the usual BHIM/Bharat Connect route failed. Read Bank of Baroda FX Retail for IBKR: From a ₹0.10 Per USD Markup to an Additional Foreign Bank Charge |
| RealValue FX Engine | International | Planning & Tracking | Computing the USD that we can send based on the allocated INR. |
| RealValue Portfolio | All | Tracking | Browser-only tool built for tracking goals and asset classes, and computing the portfolio’s XIRR. Your data stays with you! Supports importing data from Indian Mutual Funds & IBKR. |
| RealValue Family SIP Allocator | All | Planning | Used for dynamic monthly investment planning and drift correction allocation. Implements BUY Engine of The Perpetual Rebalancing Framework. |
Reflections
What went well
- IBKR’s SMART order routing handled the Nasdaq 100 ETF purchase efficiently — brokerage came in at roughly $2–3.
- Financed this month’s laptop purchase via a credit-card EMI offer instead of a lumpsum payment. Direct portfolio impact: spreading the cashflow impact over months instead of taking it all at once reduces the opportunity cost of pulling that cash out of the investment plan.
What I need to improve
- I still have to explore the Forex route further — whether there’s anything better or more stable than the FX Retail/BHIM option, given how this month went.
- Need to reduce the time spent on tax filing. The process is now documented, so hopefully next year goes faster.
New Discovery
- Filled up the new Form 122 with the payroll processing team, to adjust TCS already paid against salary TDS. Will probably publish the full account separately later.
- Bank of Baroda remittances also carry a Foreign Bank Charge (FBC) on top of the ~10 paise/USD markup — missed it because the test remittance showed NIL. Turns out it’s structural: ICICI and HDFC route straight to Chase with no intermediary bank in the chain, so they don’t carry this cost at all. See the full account in the Bank of Baroda setup post.
Expected Allocation Trends
- Nasdaq 100 absorbed the bulk of this month’s new investment and still finished with the widest drift in the portfolio. I expect it to keep getting priority in next month’s allocation until its drift closes back toward the rest of the equity sleeve.
- Debt and Gold remain overweight and received zero fresh capital again this cycle — I expect that to continue, with their share diluting passively as the portfolio grows rather than through active correction.
Publications
Articles
| Article | Summary |
|---|---|
| Demystifying ITR-2: My FY 2025-26 Tax Filing Journey | A schedule-by-schedule reconstruction of my FY 2025-26 ITR-2 filing. |
| Bank of Baroda FX Retail for IBKR: From a ₹0.10 Per USD Markup to an Additional Foreign Bank Charge | The full record of onboarding Bank of Baroda as a second FX Retail relationship bank. |
| Failed FX Retail Transaction via BHIM Bharat Connect: An 11-Day Lien and a Permanently Lost Investment Window | The full account of this month’s 11-day lien and what it actually cost. |
| My Credit Card Stack: Consolidating to 3 Banks and 3 Networks | Reshuffling my card lineup this month to finance the laptop purchase and simplify my overall setup. |
Software
| Item | Details |
|---|---|
| Xfina | A Rust-based, privacy-first financial statement parser, exposed through Rust, CLI, Python, JavaScript/WASM, and a browser-based web app. Read Xfina: One Rust Core, Five Interfaces — Building a Privacy-First Financial Statement Parser |
| Minor fix to RealValue Family SIP Allocator | The Even Drift solver is now capacity-aware of individual investor constraints, so an asset like international equities demanding more cash than eligible investors can provide no longer breaks the drift solve. See the changelog for details. |
Transparency Note
This portfolio reflects my personal investment strategy and risk tolerance. It is not investment advice. All returns, allocations, and XIRR figures — including for international assets like Nasdaq 100 — are tracked and computed in INR, so currency movement is baked into the numbers rather than shown separately.