/changelog
What's newनया क्या है
This site is a living project. Every change below comes straight from its Git history, updated automatically.यह साइट लगातार बनती रहती है। नीचे का हर बदलाव सीधे इसकी Git हिस्ट्री से आता है, अपने आप अपडेट होकर।
55
changes in 30 daysबदलाव, पिछले 30 दिनों में
8
days shipped in 30दिन जिनमें कुछ शिप हुआ
4
weeks in a rowहफ़्ते लगातार
September 2026
- Improvedबेहतर
Always show an install option for RitikOS on mobile
- The button now always shows (unless already installed); without a
- 'Get the app' in the mobile menu and footer opens /magic?install=1.
- Install buttons in iPhone and Android Settings.
- Improvedबेहतर
Premium features: AI summaries, listen mode, insights, Hindi, changelog, PWA, now playing, live visitors, DSA journal
- Blog: AI TL;DR (Gemini, cached per post version, English + Hindi) and
- Visitor insights: anonymous first-party analytics (no cookies, no IPs,
- English / हिन्दी toggle for the classic site, flash-free and static.
- /changelog built from the repo's commit history.
- RitikOS installable as an app (scoped service worker, offline support,
- Now playing via Last.fm (free) or Spotify API, shown on the homepage
- Contentकंटेंट
RitikOS: show all site content live in every edition
- Shared live data store: every section refreshes on Supabase Realtime
- Testimonials everywhere: Finder/Explorer folders, desktop icons, iOS
- Stats from the admin panel in the Mac welcome widget and the
- Empty sections hide themselves (folders, apps, menus, headers) and
- Uses page content added to the notes apps.
- Improvedबेहतर
Rename GitHub nav item to 'GitHub & LeetCode'
e1a2bfd - Improvedबेहतर
Show live LeetCode count, including zero, with a profile link
- Homepage tile always shows the real solved count (0 today) with
- New LeetCode section on /github: solved count, difficulty breakdown
- A missing LeetCode user now reports 'unavailable' instead of posing as
- Contentकंटेंट
Server-render blog posts, cache detail pages, fix titles and reading time
- Blog post bodies were fetched in the browser, so crawlers saw only a
- Project and blog detail pages read Supabase through the cookie-based
- Detail page titles lost the ' | Ritik Agarwal' suffix because the
- Show reading time as '9 min read' instead of a bare '9'.
- Stop sending the x-powered-by header.
- Fixedठीक किया
Fix opacity modifiers on theme colours (GitHub graph showed one square)
6f134fc - Contentकंटेंट
Add Labmentix internship projects to the resume
a6d2391 - Contentकंटेंट
New resume, server-rendered content, and portfolio polish
- Rewrite data/resume.ts as the single source for both résumés: adds
- Add scripts/build-resume-pdf.mjs (npm run resume:pdf), which prints
- Interactive résumé gains Experience, Certifications and project links.
- Render homepage projects, experience, testimonials and blog preview,
- Use "Full-Stack Developer" as the one title everywhere.
- Align the skills list with the résumé; replace the cliché About
- Contentकंटेंट
Update resume year of study to 3rd year
98febce - Contentकंटेंट
Add elegant interactive resume across all OS views and /resume
a2db8ec - Improvedबेहतर
Make /magic an OS picker instead of defaulting to Mac
- /magic now shows a chooser with Mac, Windows and Android cards
- The Mac/iPhone edition moves to /magic/mac.
- Every edition links back to "All editions"; switch targets and the
- Newनया
Add RitikOS Windows (Fluent) and Android (Material You) editions
- /magic/windows: Windows 11-style desktop with boot + lock/sign-in,
- /magic/android: Material 3 phone (framed on laptops, full-screen on
- Edition switchers in the Mac menu/login screen, iOS Settings and the
- Icons: Fluent UI System Icons (MIT) and Material Symbols (Apache 2.0),
- Window manager and Terminal made reusable across editions.
- Newनया
Music app in RitikOS with Ritik's Spotify picks
- data/music.ts: nine tracks from Ritik's Spotify top and recently played;
- Shared MusicPlayer: track list, album art, official Spotify embed player
- macOS: Music in Dock, Launchpad, Spotlight and the Go menu
- iOS: Music on the home screen and in the Dock (Listen Now)
- Newनया
RitikOS complete — full MacBook desktop and iPhone mode
- MacBook notch, full menu bar (RA menu with Sleep/Restart/Shut Down,
- Spotlight (Cmd/Ctrl+K) across apps, projects, posts and AI questions;
- New apps: Safari (case studies + blog reader), Mail (contact form),
- Six original gradient wallpapers; Dock magnification toggle
- Lock screen with swipe-up unlock, status bar with Dynamic Island,
- Apps open from their icon and close via the home indicator; HIG
- Newनया
RitikOS — desktop-style "Magic" mode at /magic (stage 1)
- Boot screen with RA monogram, login screen, then desktop
- Menu bar: RA menu (About, Lock, Restart, back to classic), active app,
- Window manager: drag, resize from edges, focus stacking, minimise to
- Dock with hover magnification, running dots and launch bounce
- Desktop folders (Projects, Experience, Certifications, Resume.pdf)
- Apps on live data: Finder (projects with Quick Look, experience,
- Newनया
Live GitHub data with private repo counts and contribution graph
- lib/github.ts: GraphQL when GITHUB_TOKEN is set (counts private repos
- /api/github and /api/activity cached for 60s instead of 1h
- /github page rebuilt: live status, repo totals (public/private),
- GitHub widgets poll every minute while the tab is visible and refresh
- Homepage 30-day bars use the contribution calendar when available
- Newनया
2027 features — case studies, now bento, command palette, AI assistant
- Case-study project pages: at-a-glance row, numbered sections, sticky
- "What I'm up to" bento: focus, latest GitHub commit with 30-day activity,
- Cmd/Ctrl+K command palette for pages, projects, posts and actions
- "Ask about me" assistant on Gemini, grounded only in site content,
- View transitions between project list and detail; CSS scroll reveals;
- Generated Open Graph images for projects and blog posts
- Newनया
Testimonial submissions with one-click approve and publish
- Homepage Testimonials section always shows a "Leave a testimonial"
- /feedback reworded as a testimonial form, now with nav and footer
- Admin feedback: labelled Approve & publish / Save as draft / Mark read
- Fix: admin feedback API dropped `approved`, so every converted
- Footer link to the testimonial form
- Improvedबेहतर
Homepage polish, font fix, Next 15 upgrade
- Wire globals.css and Tailwind to next/font variables so Cormorant
- Hero: single portrait and fixed role line, drop photo carousel
- Merge stats into About; replace skill percentage bars with tag rows
- New Experience section (timeline + certifications) after Projects;
- Drop homepage tech filter; normalize and dedupe /projects filter tags
- Contain the newsletter signup in a proper section
- Newनया
Certifications section with admin CRUD
4742fb6 - Fixedठीक किया
Project gallery images 404'd on a leading tab in the stored URL
- trim and URL-check each gallery entry in the schema, so a bad value is
- trim in addGalleryImage too, so it never reaches the request
- existing rows cleaned directly in Supabase; all four URLs verified 200
- Improvedबेहतर
Replace favicon with new RA monogram
32be6b2 - Newनया
Record admin actions and chart them on the activity log
- lib/activity-log.ts: logActivity() helper that never throws. An audit
- wired into all 17 write handlers across blogs, projects, testimonials,
- /api/admin/activity-log/summary aggregates server-side rather than
- charts are hand-rolled SVG: two small charts do not justify adding
- Newनया
Reorder timeline events from the admin table
- up/down arrows on each row swap display_order with the neighbour. The
- the reorder is applied optimistically and re-fetches from the database
- an Order field in the create/edit modal for setting a position directly
- new events default to max(display_order) + 1 instead of colliding on 0
- Fixedठीक किया
/projects always rendered 'No projects found'
56628c7 - Fixedठीक किया
Project and blog detail pages 500'd on a relative server-side fetch
f22d1fd - Fixedठीक किया
Admin projects page crashed with 't.filter is not a function'
da4ef03 - Improvedबेहतर
Redeploy to pick up NEWSLETTER_FROM
05f1ceb - Newनया
Working newsletter - double opt-in, unsubscribe, send on publish
- confirm_token / unsubscribe_token / confirmed_at on subscribers
- newsletter_sent_at on blogs, so editing a published post cannot re-mail
- subscribe/confirm/unsubscribe as SECURITY DEFINER functions, so anon
- backfilled newsletter_sent_at on the two existing published posts so
- confirmation email on subscribe; /api/newsletter/confirm to activate
- /api/newsletter/unsubscribe with GET and RFC 8058 one-click POST, plus
- Fixedठीक किया
Hero carousel photo 4 never finished loading
- the sources were unresized camera originals (6.6MB and 2.0MB)
- <Image fill> was used with no 'sizes', so Next.js assumes the image
- Fixedठीक किया
Admin writes 400'd whenever a nullable column held null
- widen string, number and array fields to .nullish() across the
- leave the booleans on .optional() deliberately: a null 'published'
- activity-log also read query params straight from searchParams.get(),
- Fixedठीक किया
Sitemap, robots, RSS and JSON-LD all pointed at ritik.dev
- route every one of them through the exported siteUrl, so
- set metadataBase, so canonical and og:url resolve to absolute URLs
- correct the LinkedIn URL in the Person schema; the profile slug in
- Fixedठीक किया
Production build failed - generateMetadata exported from client components
- move each page's metadata into a sibling server layout.tsx, which keeps
- drop the export (and the now-unused import) from the nine client pages;
- point the siteUrl fallback at www.ritikagarwal.me instead of ritik.dev,
- Fixedठीक किया
Converting feedback to a testimonial always 400'd on null role/company
- widen role/company/avatar/rating to .nullish() (all three columns are
- insert the testimonial before marking the feedback reviewed; the old
- surface the API error in the admin toast instead of a generic
- Newनया
Fix SEO metadata, add accessibility, create OG image
- Fix canonical URLs: per-page canonical paths instead of always "/"
- Fix per-page metadata: add generateMetadata to all pages
- Fix host mismatch: use ritik.dev consistently for og:url
- Create og-default.png from SVG for social sharing
- Add accessibility: SkipNav, ScrollProgress, StructuredData
- Add Vercel Analytics and Speed Insights
- Fixedठीक किया
Public insert routes 500'd on RETURNING, and comments posted to the feedback route
- feedback: drop .select().single(), whitelist columns instead of
- comments: drop .select().single()
- BlogComments: post to /api/comments with {slug,name,message} instead of
- Newनया
Add bulk operations, activity log, export/import, and build fixes
- Add bulk operations (select, delete, mark-reviewed) across all admin pages
- Create Activity Log viewer page with server-side pagination and filtering
- Create Export/Import page with JSON backup and upsert/replace strategies
- Create ConfirmDialog reusable component for destructive action confirmations
- Add Activity Log and Export/Import navigation cards to admin dashboard
- Create API routes: admin/activity-log, admin/bulk, admin/export, admin/schedule
- Fixedठीक किया
/api/blogs ignored ?slug, so every post rendered "Post Not Found"
0556989 - Newनया
Add portfolio photos for carousel
dfd56d7 - Newनया
Add photo carousel to hero section
9c33ad5 - Fixedठीक किया
Stats counter stuck at 0, and honour ?limit on /api/blogs
55b1d1e - Fixedठीक किया
Move the admin auth guard off the login page
436f9e0 - Fixedठीक किया
Replace the cache-first service worker with a kill switch
b83d0e1 - Fixedठीक किया
Ship public/profile.jpg and public/resume.pdf
93198d6 - Fixedठीक किया
Tell the user when a post is saved as a draft
5797d92 - Fixedठीक किया
Redirect logged-out users away from the admin shell
386fb8e - Improvedबेहतर
Pin functions to sin1 to colocate with Supabase ap-southeast-1
d1dab6e - Fixedठीक किया
Make admin API schemas type-tolerant and name the failing field in 400s
70e9dcb - Fixedठीक किया
Add missing projects columns (short_description, cover_image, gallery, display_order)
373c2ed - Newनया
Add RLS lockdown and admin write policies migration
d8a16b4 - Fixedठीक किया
Correct reading_time type in blog admin initial form state
- add timeline table creation to supabase-migration.sql
- gitignore .env*.local (holds VERCEL_OIDC_TOKEN), supabase/.temp/, .claude/
- Fixedठीक किया
Ensure reading_time is always string
02d5bd9 - Fixedठीक किया
Reading_time should be string not number
921844e - Newनया
Complete editorial redesign with Supabase auth & admin portal
29be3f9
May 2026
- Fixedठीक किया
Fix caching - disable cache headers
1f36510 - Newनया
Add visible Leave a Testimonial button in Testimonials section
4890f52 - Newनया
Add feedback link to contact section
1a5c9b7 - Fixedठीक किया
Fix stats INSERT missing updated_at column
1345861 - Improvedबेहतर
Enhanced admin portal: stats, testimonials, timeline, feedback system
22fd0e4 - Fixedठीक किया
Fix timeline dates from 2024 to 2025 in About section
3143aba - Fixedठीक किया
Fix timeline and stats with accurate 2025+ milestones
c6d2caa - Newनया
Add 3D hero, testimonials, stats, timeline, PWA support
77941c9 - Newनया
Add .vercelignore
bfc55cf - Improvedबेहतर
Exclude project-context-tracker from build
d4e2f6b - Improvedबेहतर
Update StockSchool and MindSpace demo/code links
afa2981 - Newनया
Add fallback data for projects and blogs
7c1b45c - Fixedठीक किया
Fix TypeScript filter
c79a0c2 - Fixedठीक किया
Fix Projects to fetch from Supabase
4b44d5c - Fixedठीक किया
Fix BlogPreview to fetch from Supabase
0f06438 - Improvedबेहतर
Disable RLS completely
cc59c2e - Fixedठीक किया
Fix RLS policies to allow public inserts
d991f4a - Fixedठीक किया
Fix admin page field names to match Supabase schema
a205cc5 - Fixedठीक किया
Fix SQL schema with idempotent policies
30906c8 - Fixedठीक किया
Fix blog pages to fetch from Supabase
11e9cac