What's happening with DWCode
Follow along as the platform grows. This page is updated every time something ships, something breaks and gets fixed, or a new idea makes it onto the roadmap.
In-app notifications
A notification bell in the navbar that surfaces activity like contest start reminders, new problems, and comment replies.
AI-powered hints
Ask for a contextual hint on any problem without revealing the full solution. Powered by Gemini.
Problem collections / learning paths
Curated sets of problems grouped by topic (Arrays, Objects, Reduce, Date-Time…) so users can follow a structured learning path.
Per-problem discussion threads
A dedicated discussion section on each problem page where users can ask questions, share approaches, and upvote helpful comments.
Embeddable playground snippets
An <iframe> embed so any DWCode playground snippet can be embedded directly in blog posts, documentation, or external sites.
Mobile app (PWA)
Progressive Web App version of DWCode for offline problem browsing and code reading on mobile.
Leaderboard → public profiles
Every player on the leaderboard is now clickable — jump straight to their public profile to see their tier, heatmap and recent submissions. Users without a public profile show as plain rows.
Leaderboard pagination
The leaderboard is paginated server-side (25 players per page) with sort by score, solved or accuracy. Rank numbers stay canonical across every sort, and your own rank card works from any page.
Monorepo restructure
The app is now split into client/ (the Next.js frontend) and server/ (a new TypeScript backend). A single `npm run dev` starts both.
New backend service
A layered Express + TypeScript API with request validation, structured logging, rate limiting, and Clerk JWT auth. The legacy DataWeave /api/transform contract is preserved byte-for-byte, guarded by characterization tests.
Sponsorships
A new /sponsor page with Razorpay checkout, preset tiers, and a public sponsor wall. Every payment is verified server-side via HMAC signature before it counts.
Theme Store
Seven purchasable accent themes with a live try-before-you-buy preview across the whole site. Coins are now spendable — debits are atomic and race-safe.
Playground redesign
A decluttered toolbar, the AI panel removed, and a new settings dialog covering editor theme, font size, indent, wrap, minimap, line numbers, and opt-in auto-run. Your layout preference is persisted.
Site footer
A new footer with quick links across the site. Changelog moved from the navbar into it, and the footer stays hidden inside the problem workspace to keep the editor distraction-free.
Blog — dark-theme fixes
LinkedIn embed tiles are now readable in dark mode, and long-form post styling has been rebuilt from scratch — the old prose classes were inert and did nothing.
Admin user directory fixed
Users who never submitted code were invisible in the admin directory. It now unions profiles, submissions, comments, coins, and roles, with activity tabs and per-user counts.
Security hardening
Removed an unauthenticated AI endpoint that exposed the server's Gemini key. CI now scans every push for committed secrets and live API keys.
CI/CD overhaul
Separate frontend and backend pipelines with path filtering and caching, a one-click Render blueprint for the backend, and Vercel config for the frontend.
Blog voting
Upvote or downvote any blog post, with the score updating live.
Rank avatars
Profile pictures now carry tier effects that match your rank — and Grandmasters get an animated ring.
Public profiles redesigned
Public profiles got a full refresh: tier badge, score, streak, solve breakdown rings, an activity heatmap, and recent submissions.
Weekly contests
A public contest with randomly selected problems is scheduled automatically every Saturday at 15:00 UTC — show up, solve, climb the leaderboard.
404 page with rotating memes
Getting lost is now a feature. Dead links serve a fresh meme on every visit — we can neither confirm nor deny that some team members type bad URLs on purpose.
Public user profiles
Every user now has a shareable public profile at /profile/[username] showing their solve breakdown by difficulty, a 30-day activity heatmap, acceptance rate, followers/following counts, and their last 10 submissions.
Follow / unfollow users
Users can follow and unfollow each other directly from public profile pages. Follower and following counts update in real time.
Edit profile — username & bio
An "Edit Profile" dialog on the profile page lets users set a custom username (3–20 alphanumeric characters) and a short bio. Usernames are unique and case-insensitively validated.
Automatic profile setup on first sign-in
On first authenticated load, a default username is auto-generated from the user's email and a UserProfile record is created silently — no manual setup required.
Activity heatmap & progress rings
New reusable chart components: a 30-day submission heatmap with intensity-based colouring, and SVG progress rings showing solve percentages per difficulty level.
Hydration error with DialogTrigger fixed
A React hydration mismatch on the profile page caused by DialogTrigger with asChild was resolved by switching to the render prop pattern.
Added missing shadcn Label component
The Label UI component was missing from the component library. It has been added so form fields across the app render correctly.
Home dashboard enhancements
The home dashboard now shows username, follower/following counts, and a link to the user's public profile. The profile data fetch also auto-triggers setup if a username is missing.
Product Tour for new users
First-time signed-in users now see a friendly step-by-step walkthrough introducing Playground, Problems, Contests, Blog, and the Leaderboard.
Pipeline & Changelog page
This very page! A public roadmap showing shipped features, what's in progress, and what's coming next.
Blog — LinkedIn embed rendering fix
The blog listing page was showing raw <iframe> HTML as plain text instead of a preview card. Fixed: the list now shows a clean LinkedIn preview tile; the detail page renders the embed correctly.
Blog — shareable links & login-free reading
Blog posts are now fully public — no sign-in required to read. Each post has a Share button that uses the Web Share API on mobile or copies the URL on desktop.
Admin link controlled by environment variable
The Admin nav button is now hidden by default. Set NEXT_PUBLIC_SHOW_ADMIN=true in your environment to reveal it.
Maintenance mode banner
Operators can flip NEXT_PUBLIC_MAINTENANCE_MODE=true to show a friendly overlay banner site-wide without blocking browsing.
Single-place backend URL config
The DataWeave compiler backend URL is now controlled by DWL_BACKEND_URL in .env.local. Change one env var to switch between local Docker, staging, or production — no code edits needed.
Apache 2.0 license footer
A global footer now appears on every page stating the project's open-source Apache 2.0 license.
Dashboard stats scoped to authenticated user
Solved, Attempted, and Bookmarked counts on the home dashboard were previously returning global aggregates. They are now correctly filtered to the signed-in user's data only.
Bookmarks scoped per user
Bookmarks now store a userId field and enforce a compound unique index on {problemId, userId}. The API routes require authentication and return only the calling user's bookmarks.
Guest progress migration on sign-in
Accepted solves made as a guest are persisted to localStorage and silently migrated to the user's account on first authenticated dashboard load.