r/webdev • • 1h ago

How are ya’ll planning on supporting Apple Touchscreen Macs?

• Upvotes

Interestingly having played around with macOS 27.2 and using Sidecar on an iPad for touch inputs, it looks like Safari isn’t going to send proper touch events like Windows touchscreens do. Best we get is mousedowns with no buttons=0.

Even worse testing in Chrome, all we get are scroll events. That’s fine for panning but if you want to do anything custom like drawing, dragging etc you’re SoL unless you want to try detecting these off heuristics. Maybe they’ll improve the situation before it’s in people’s hands, but curious to hear what other devs with complex web apps are planning on doing.


r/webdev • • 1h ago

Discussion Why are banking sites (at least the ones I used) frequently designed so badly?

Post image
• Upvotes

Do web developers not get the resources to understand any banking concepts? Here's a picture of the column order of pending wire requests you inputted. Why would you put amount in the last column and date in the middle? They recently updated their website and the columns feel like they're randomized, making it harder for us to review our entries as they changed the order. FYI I work in finance/acctg but I previously had a year of web dev experience looking into as a career few years back, so I have an eye for these things. Do non tech companies not heavily invest in their IT team, perhaps etc?


r/webdev • • 5h ago

Question How do I actually make my website optimized for users?

0 Upvotes

Hello guys, a little while ago I found some other teenagers on here that were looking for a backend developer for a website, and I volunteered this I have some knowledge with node.js and those concepts, and I've built a full stack website (basic backend) with it. Here is the github because it will be relevant later: https://github.com/norrie-adams/EVS-Small-Engine-Repair-Site

However, I do not think this is like a website that could properly support like actual people. And that was part of the reason I stopped building it (I also just lost interest). But this is a thing where other people are relying on me to build something functional (or at least more functional then this site). So I just want to know, what did I do wrong with this project, and what could I improve upon for next time?

Sorry if this isn't super clear, but I appreciate any advice you can give me :)


r/webdev • • 7h ago

Which AI coding tool actually stuck in your daily workflow?

0 Upvotes

There’s a new one every week. Most people try them and drop them after a few days.

Which one are you still using months later, and what’s the one thing it does better than the rest?


r/webdev • • 8h ago

Ayuda con proyecto jsf

0 Upvotes

Tengo un proyecto app web jsf , jakarta +open liberty etc

Me pregunto si me podrían ayudar dándome opiniones sobre el


r/webdev • • 8h ago

Those who built apps before the AI boom - was the timing good or bad?

2 Upvotes

I'm a frontend developer/designer with experience in the past building and selling largely SaaS software.

That was before AI as we know it, and I'm starting to feel numb to the amount of people I who've become a developer overnight tell me about the new app 'they built.'

Like any developer I had several ideas stewing for years and I nearly took the leap on a few of them, and when I see the landscape like it is now half of me thinks 'I'm so glad I didn't take huge risks and build X as it would have just been copied now anyway' and the other half says 'I wish I got in before everyone was developing apps in a few minutes.'

I'm curious for those who DID build something prior to this shift, are you glad you got in then, or have these changes made all the time spent not worth it?

Thanks!


r/webdev • • 9h ago

Asincify to JSPI speedup results

Thumbnail
pcbjam.com
1 Upvotes

r/webdev • • 11h ago

Discussion Am I a hypocrite for looking down on AI usage while using it for webdev? *See the post for further details*

0 Upvotes

When it comes down to design and art, I like to do everything manually because I hate AI-generated content. I make my own 3D models, own animations for videos, etc.

Now I am working on my personal portfolio, and I am using AI like Claude to help me with setting up my project, like, for example, the library Three.js. While I am very happy with the current result and how I design and redirect AI, I feel like a hypocrite to be so negative to people that use AI-generated content while using AI for programming myself.

The reason I post this here is to ask how others feel about this and what advice they would give me.

*Update*

I want to thank the people for the very insightful responses to my question. While I am working on my website, I want to understand and change as much of the code myself.


r/webdev • • 12h ago

How does Instagram process and post images?

Post image
0 Upvotes

So I do not really have much understanding of web development and back end but when you save an instagram page as an html from its website. It doesn't save the way instagram looks, rather it shows a representation of the UI and subtext behind images (not the images themself) like the image shared above.

I am also more curious how it reads the image and tries to classify it, and why something like the subtext "May be an image of ----" is in the backend when you do not see it in the interface itself. I am curious of the process itself if someone is kind enough to explain itself.


r/webdev • • 12h ago

Discussion Your AI UI skill is doing the part you were supposed to learn

178 Upvotes

So a few of my friends have stopped using Figma. They go straight to production and make changes there.

When I first heard this I was honestly confused. Like where do you try things out? Where do you compare two versions?

Then I saw what they were building. The landing page feels like one product, the settings page feels like another, the dashboard feels like a third. Buttons are different, spacing is different, hover is different on every page. There’s no uniformity, no design system, nothing.

So I asked them how they’re doing it, and the answer is always “I use this AI skill” or “I bought this skill pack”. People are actually selling these now. Skill packs, prompt bundles, paid repos. And there are a lot of free ones on GitHub too.

It doesn’t make sense to me at all. How will you learn anything? And how will you polish the product if it looks different every time you generate it?

When I brought this up, someone said just add a memory file so it stays consistent.

Okay, but then how will you make changes? You never decided why the button has that radius or why it’s that grey. The AI decided. So when something needs fixing, you don’t know what to fix. You just prompt again and hope.

And now there are courses around this too. The idea is learn this design vocabulary, tell it to the AI, and you’ll get good UI. They call it beginner friendly. But then you see what’s inside and it’s stuff like:

  • spring easing, stiffness, damping
  • optical alignment
  • vertical rhythm
  • morphing transitions
  • 60-30-10 colour rule
  • type scale ratios

If a senior buys it, it’s fine. They already know what damping feels like, they know what they’re skipping.

But a beginner has never played with an easing curve and seen it go from cheap to smooth. Never moved something 2px and felt it finally sit right. They’re just memorising words and giving them to the AI. You can know the word damping and still have no idea when the bounce is too much.

Selling that as beginner friendly feels like a deceiving thing to me. You learn these words after you’ve actually done the work, not before.

Also design is never one try. I go through so many versions before something feels right. In Figma that’s easy, I put five versions side by side and throw four away. In production code every change costs time, so whatever comes out first just ships.

I’m not trying to dunk on my friends, they’re good at what they do. And I get why these skills are tempting. But paid or free, they’re doing the exact part you’re supposed to learn.

If you’re using one, just try building one page without it. Pick the hover, the spacing, the colours yourself, even if it’s bad. That’s literally how you get better at this.

Anyone else seeing this or is it just me? just my thoughts 🤷


r/webdev • • 13h ago

Question what's your process for blast radius containment when AI code breaks something?

0 Upvotes

Here's roughly the process we've landed on. Any change touching a function called from more than a couple other places gets flagged for a wider blast radius check before it reaches canary. The canary stage compares actual runtime behavior against the previous version, not just error rates, since a function can run clean and still behave wrong. We lean on hud for that part, it compares each function against how it behaved before the deploy.

That second part matters most, since most of what's bitten us hasn't been a crash, it's been subtle behavioral drift that technically runs fine. Works best with good baseline data on prior behavior, worse when the function's too new to have one. How would you improve this?


r/webdev • • 13h ago

Discussion Do you use a DESIGN_PRINCIPLES.md for your projects UI/UX

0 Upvotes

Do you just wing it and use screenshots for inspiration or do you use a design principles md file where you mention all the design principles like the fonts, colors, dark mode colors, graphs, infographics, etc.


r/webdev • • 18h ago

Discussion New Stack Alert!!

0 Upvotes

https://getforma.dev a TypeScript framework with no V8/Node on the server and no Virtual DOM on the client. It compiles TSX into a binary format called FMIR at build time so a Rust server can render SSR HTML directly, and only ships tiny signal islands to the browser. I’ve been using it to build apps with AI lately and it seems because the contract between TS and Rust is so strict, it's been ridiculously fast and efficient. Not bloat.


r/webdev • • 19h ago

How do you mentally reset when switching between completely different codebases?

21 Upvotes

I work on 2-3 different projects throughout the week (different clients, different tech stacks), and I've noticed my productivity tanks for the first 30-45 minutes after switching contexts. It's like my brain is still thinking in the patterns of the previous project.

Some things I've tried: - Taking a short walk between switches - Keeping detailed notes about where I left off - Dedicating full days to single projects when possible

The notes help the most, but I'm curious what workflows other devs have developed for this. Do you have any rituals or techniques that help you get back into flow faster when jumping between projects?

Especially interested in hearing from freelancers or consultants who deal with this regularly.


r/webdev • • 23h ago

📚 Struggling to stay focused while studying?

0 Upvotes

I built Focus Mode, a free Chrome extension designed to help you minimize distractions and stay focused while studying, working, or getting through assignments.

If you're looking for a simple way to improve your study sessions, give it a try!

👉 https://chromewebstore.google.com/detail/focus-mode/hnifglepddkghmgimlkacolafibhnijf?authuser=0&hl=en

Completely free to use! 😊

I'd love to hear what you think!


r/webdev • • 1d ago

Discussion Who remembers when web developers portfolio websites had a “skills chart”

290 Upvotes

HTML 95%
PHP 70%
jQuery/JavaScript 80%
MySQL 58%

Gives me the shudders thinking about it…


r/webdev • • 1d ago

Codepen preview always dimmed in Safari

5 Upvotes

I am working in Codepen in Safari, but everything is dim and gray instead of being the true color. It is fine in Chrome and Firefox. I have tried resetting preferences and caches in safari along with unchecking things in FeatureFlags and nothing is amending it.

Safari Screenshot
Firefox Sceenshot
Chrome Sceenshot

r/webdev • • 1d ago

Manager thinks anything can be coded in 1 hour or less with AI.

476 Upvotes

I work for a large accounting firm where the impact of getting things wrong feels quite big.

We’ve started a new sprint for the next chunk of work. The team has put together estimates for various elements of a new accounting feature involving bank transactions, VAT calculations and reconciliation, with the biggest part taking several days by one developer.

My boss gets visibly frustrated and questions how on earth anything can take a few days in the era of AI. He’s also started saying he can do absolutely anything with AI in an hour or less.

Bear in mind before AI what we’re working on would have taken triple or even quadruple the time.

Is this the new normal or should I be looking for a new job? How are we supposed to respond to this?


r/webdev • • 1d ago

A Modern CSS Guide to Responsive Web Design

Thumbnail
stephcraft.net
0 Upvotes

If I missed anything, let me know!


r/webdev • • 1d ago

I refuse to pay for business email on every side project

0 Upvotes

I’ve been working on a few projects lately, and email has been the most annoying part of all of them. I buy a domain, and then realize I can’t put a gmail address on a contact page without looking like I’m about to ask for someone’s bank details.

Most business email options are either a monthly fee for every single user, or a trial that expires right when you’ve finally got everything set up. The free ones are really limited. I looked at Zoho, and between the restrictions, the dated look, and having to dig through settings every time I added a domain, it felt like more work than the project itself. There also doesn’t seem to be much for students or small indie devs who just want an address on their own domain without paying six dollars a month for it to receive one newsletter and a spam email from a guy named Kevin.

I thought about running my own mail server for about five minutes. Then I read about deliverability. Sending an email is easy, but landing in the inbox instead of spam is the hard part, and a brand new server has no reputation, so you spend weeks telling people to check their junk folder. Not worth it for a solo dev.

So I ended up building my own solution, it runs in your own free Cloudflare account. Cloudflare handles incoming mail, a Worker and a database run the app, and for sending you plug in something like Resend, Brevo, Mailjet or any SMTP server. No server to babysit, no per seat pricing, and nobody sitting in the middle reading your mail. You can add as many users, domains and aliases as you want and it still costs nothing. It’s open source under MIT.

I built it mainly for people like me. Solo devs with too many side projects, students, freelancers juggling a few client domains, small teams that just want a shared support@ and sales@, and honestly anyone with a store website. It’s not meant for cold emailing or bulk sending though, the free limits are small and the providers will ban you fast if you try.

If you want a professional email and feel like giving it a go, I’d really like to hear how it went. What broke, what confused you, what looked off, what you’d never trust it with. And if the whole idea is flawed, tell me, I’d rather find out now than after I add AI features nobody asked for.

Repo : https://github.com/sums001/OpenInbox


r/webdev • • 1d ago

Discussion Why do our UI tests break every time the interface changes? I counted 71 failures and most weren't even bugs

0 Upvotes

Front end dev, i own most of our e2e suite, and last sprint finally annoyed me enough to count.

We have about 310 Playwright tests on a react app. 71 went red after a sprint that, from a user's point of view, changed almost nothing. i went through every one instead of rerunning and hoping:

- 47 were locators. the element was still there and still did the same thing, but the path to it changed. a card got wrapped in a new container, a class got renamed in a design pass, a button became a link styled as a button.

- 14 were timing. a page got slower after a data change and the wait didn't follow it.

- 6 were environment. our CI image had drifted from what devs run locally.

- 4 were real bugs.

So my honest answer to why our UI tests break every time the interface changes is that most of them check how the page is built, not what it does. the user sees the same Save button. the test sees a different DOM.

the difference in one line:

what i'm weighing for the other 47:

user-facing locators everywhere, getByRole and getByLabel, which is what the Playwright docs push. fixes a lot of it, but only if the markup has real roles and labels, and half our components don't.

data-testid on everything. it works, but it depends on every dev remembering, forever.

self-healing locator tools like mabl or testim, which repair the selector when it breaks. the catch is a heal can quietly route around a real regression.

vision based tools like Askui, which find the element by what's rendered on screen rather than in the DOM, so a new wrapper div doesn't matter at all. the tradeoff flips, a visual redesign is now the thing that breaks you.

My current plan is to fix our accessibility markup and get better tests as a side effect. tell me if that's naive. if you've measured this, what share of your failures were locators, and what actually brought it down?


r/webdev • • 1d ago

News CVE-2026-115560: Unpatched PHP RCE Vulnerability

Thumbnail
socprime.com
0 Upvotes

r/webdev • • 1d ago

Discussion Yet another AI rant

111 Upvotes

What bothers me about AI and it's wide adoption is that it creates conflicting requirements for the worker (developer, designer, manager, etc.). On one hand you are expected to perform better and/or faster, because you are a specialist, an expert that has the knowledge and offloads the work to the machine, supervising its output. You should use your experience and professional judgment to steer it to the right conclusions and catch it when it overcomplicates or starts hallucinating.

At the same time you are expected to cover more ground. Stretch to the adjacent technologies or fields. Frontend developers are expected to perform full stack work, designers to code frontend, backend devs to create a design in a pinch. Here you are not an expert, you might have interfaced with the field, but you don't have the experience and don't really understand the inner workings, best practices. You didn't go through all the novice mistakes and learn from them.

Somehow, the first expectation still works here. You are expected to be faster and better at this too. But the roles are reversed, now the machine is suddenly the wise expert in the field and you got to trust it, wave through the changes it proposes to stay fast and produce the work of the your ex-colleague made redundant and laid off due to all the AI-productivity gains. You don't have the opportunity to get the new relevant skills, because nobody has time for hand coding/creating/learning, it's such a 2022 idea. Here in 2026 we're all on a tight schedule to pump out the results unless you want to end up on a PIP.

On top of that you are expected to get good at AI. Don't just use it, like some kind of normie. Get good. Stay on top of the hype. Use agent loops. Set guardrails. Make it deterministic. Don't use agent loops. Have you tried this new harness? Don't spend too much money on tokens. Run the model locally. What do you mean you don't have a $5000 Nvidia golden box? Do you want to become irrelevant and get left behind?

Welcome to the bright future, comrade.


r/webdev • • 1d ago

Discussion First client e-commerce store (10–20 products, near-$0/mo hosting): Roll my own cart/orders on Supabase, or use Medusa.js?

0 Upvotes

I'm a CS undergraduate working on my first real-world client project: a small e-commerce website. Since this is my first time building and deploying a production store for a client, I'd really appreciate an architecture sanity check from experienced devs.

The Context & Why Not Shopify/WooCommerce?

  • Catalog size: Around 10–20 products initially (simple variants, low volume).
  • Core features: Online payments, basic order tracking/delivery management, and a simple admin view.
  • The Constraint: The client wants near-zero monthly recurring costs initially (ruling out $30+/mo Shopify plans and managed plugins), and they're happy for me to custom-build it as a flat-fee project.

Architecture Crossroads: Custom Supabase vs. Medusa.js

I'm torn between two approaches:

Option A: Keep it simple and build the cart/order logic myself

  • Frontend: Next.js (or React + Vite) + TypeScript
  • Hosting: Cloudflare Pages (Free)
  • Backend & DB: Supabase PostgreSQL + Edge Functions + Auth/Storage (Free tier)
  • Why I like it: $0/mo infrastructure, familiar stack, full control over a very small feature set (just 10–20 products).

Option B: Use a headless commerce engine (Medusa.js)

  • Swap custom database tables/functions for Medusa.js so I don't have to build cart, checkout, and inventory logic from scratch.
  • My hesitation: I'm new to Medusa, and hosting a dedicated Node.js backend + Redis + Postgres seems harder to keep near $0/mo compared to pure serverless/Supabase.

Questions for Devs Who Have Built Client Stores

  1. Supabase Free Tier in Production: Aside from the 7-day inactivity pause, are there any gotchas with running a small production store on Cloudflare Pages + Supabase Free tier?
  2. Custom Logic vs. Medusa.js: For only 10–20 products, is Medusa.js overkill with a steep learning/hosting curve, or is rolling my own cart and checkout state in Supabase a trap I'll regret?
  3. Custom Payment Gateways: Stripe isn't supported in my region, so I have to integrate a local payment gateway via webhooks/REST API. Is it easier to wire up a custom gateway directly in Next.js/Supabase Edge Functions, or through Medusa's plugin system?
  4. Delivery & Fulfillment: At this scale, would you integrate courier APIs on day one, or just build an admin dashboard for manual order/tracking updates first?
  5. Blind Spots: What hidden security mistakes (e.g., price tampering, webhook race conditions) or client handoff headaches tripped you up on your first e-commerce build?

I'd especially appreciate insights from anyone who has built and maintained small custom stores for real clients.

Thanks in advance!


r/webdev • • 1d ago

Question How should I integrate an existing NestJS authentication system with a React + Flowbite React frontend?

1 Upvotes

I'm developing a Grievance Redressal Portal as a learning project. My backend is built with NestJS, TypeScript, Prisma, and PostgreSQL.

I have been implementing authentication (User Sign In and Sign Out) using the "@nestjs/authentication" package of NestJS v12.

I would like to know conceptually the changes to be made to my back end such that I should be able to extend the authentication feature to a React-based front-end.

I have adapted the code by hand from the "Register The Authentication Module" and "Add Sign-Up and Sign-In" sections of the NestJS docs for NestJS v12: Authentication | NestJS - A progressive Node.js framework

I am posting my code here.

//sign-in.dto.ts
import { PickType } from "@nestjs/swagger";
import { UserUniversalDto } from "../../users/dto/user-universal.dto";
export class SignInDto extends PickType (
    UserUniversalDto,
    ['user_email', 'user_password']
) {};
//credentials.service.ts
import { ConflictException, Injectable } from '@nestjs/common';
import { UsersService } from '../users/users.service.js';
import { CreateUserDto } from '../users/dto/create-user.dto.js';
import { FindUserByEmailDto } from '../users/dto/find-user-by-email.dto.js';
import * as argon2 from 'argon2';
import { USER_STATUS } from '../users/user.constants.js';

()
export class CredentialsService {
  constructor(
    private readonly usersService: UsersService
  ) {}

  async register(createUserDto: CreateUserDto) {

    const findUserByEmailDto: FindUserByEmailDto = {
      user_email: createUserDto.user_email
    }

    // Don't create the user if the email already exists.
    if (await this.usersService.findUserByEmail(findUserByEmailDto)) {
      throw new ConflictException('Email already registered. User already exists.');
    }
    // The address is unverified: anyone can type any email into a sign-up form.
    const registered_user = await this.usersService.createUser(createUserDto);
    return registered_user;
  }

  /** The user, or null when the email or the password is wrong. */
  async verify(email: string, password: string) {

    const findUserByEmailDto: FindUserByEmailDto = {
      user_email: email
    }

    const found_user = await this.usersService.findUserByEmail(findUserByEmailDto);

    // Checking if the user exists.
    if (!found_user) {
      throw new ConflictException('User does not exist. Login rejected.');
    }

    // If the user is suspended, reject login by throwing an exception.
    if (found_user.user_status === USER_STATUS.SUSPENDED) {
       throw new ConflictException('User is suspended. Login rejected. Please contact admin.');
    }

    // If the found_user's password is wrong, (password_hash doesn't match) then the it should return null.
    const password_hash: string | null | undefined = found_user?.user_password;

    const password_check = await argon2.verify(password_hash as string, password);

    // Checking if the user's password is correct.
    if (password_check !== true) {
      throw new ConflictException('Incorrect username or password. Login rejected.');
    }


    return found_user;
  }
}

//myauthentication.controller.ts
import { Body, Controller, HttpCode, Post, UnauthorizedException } from '@nestjs/common';
import { Public, SignInService } from '@nestjs/authentication';
import { SignInDto } from './dto/sign-in.dto';
import { CredentialsService } from './credentials.service';
import { CreateUserDto } from '../users/dto/create-user.dto';

()
('auth')
export class MyAuthenticationController {
  constructor(
    private readonly credentialsService: CredentialsService,
    private readonly signInService: SignInService,
  ) {}

  ('sign-up')
  async signUp(@Body() createUserDto: CreateUserDto) {
    const user = await this.credentialsService.register(createUserDto);
    var string_user_id = String(user.user_id);
    await this.signInService.signIn(string_user_id, { method: 'password' });
    return user;
  }

  ('sign-in')
  (200)
  async signIn(@Body() signInDto: SignInDto) {
    const user = await this.credentialsService.verify(signInDto.user_email, signInDto.user_password);

    var string_user_id = String(user.user_id);

    const { session } = await this.signInService.signIn(string_user_id, { method: 'password' });
    return { mfaRequired: session.mfa === 'pending' };
  }

  ('sign-out')
  (204)
  async signOut() {
    if (!(await this.signInService.signOut())) {
      throw new UnauthorizedException();
    }
  }
}

//myauthentication.module.ts
import { Module } from '@nestjs/common';
import { UsersModule } from '../users/users.module';
import { SessionAuth } from './session-auth.provider';
import { MyAuthenticationController } from './myauthentication.controller';
import { CredentialsService } from './credentials.service';

({
  imports: [UsersModule],
  controllers: [MyAuthenticationController],
  providers: [SessionAuth,
    CredentialsService
  ]
})
export class MyAuthenticationModule {}

//session-auth.provider.ts
import { Injectable } from '@nestjs/common';
import { AuthenticationRegistry, SessionCookieProvider, type SessionRecord } from '@nestjs/authentication';
import { UsersService } from '../users/users.service.js';

import type { User as PrismaUser } from '../generated/prisma/client.js';
export type User = Omit<PrismaUser, 'user_password'>;

()
export class SessionAuth extends SessionCookieProvider<User> {
  constructor(
    private readonly usersService: UsersService,
    registry: AuthenticationRegistry,
  ) {
    super();
    // Adds this provider to the chain the guard runs for every request.
    registry.registerProvider(this);
  }

  // Called for every request with a live session cookie.
  // Returning null (the user was deleted) ends the session.
  validate(session: SessionRecord) {
    console.log("In validate() in SessionAuth")
    const user_id = session.userId; 
    var numeric_user_id = Number(user_id);
    return this.usersService.findOneUser(numeric_user_id);
  }
}

NOTE 1: The authentication system uses server-side sessions managed through nestjs/authentication and a session cookie. The package's SessionCookieProvider reads the cookie and loads the user through the validate() method.

NOTE 2: I am also asking this question since NestJS v12 has only been released on August 27, 2026 and there don't seem to be many resources that show how to extend this system to the front-end.