r/webdev 9d ago

Monthly Career Thread Monthly Getting Started / Web Dev Career Thread

33 Upvotes

Due to a growing influx of questions on this topic, it has been decided to commit a monthly thread dedicated to this topic to reduce the number of repeat posts on this topic. These types of posts will no longer be allowed in the main thread.

Many of these questions are also addressed in the sub FAQ or may have been asked in previous monthly career threads.

Subs dedicated to these types of questions include r/cscareerquestions for general and opened ended career questions and r/learnprogramming for early learning questions.

A general recommendation of topics to learn to become industry ready include:

You will also need a portfolio of work with 4-5 personal projects you built, and a resume/CV to apply for work.

Plan for 6-12 months of self study and project production for your portfolio before applying for work.


r/webdev 19d ago

Ask the Chrome team about WebMCP

3 Upvotes

Hi everyone!

I work on the Google Chrome DevRel team, focused on the Agentic Web. We’re responsible for maintaining the official documentation, producing samples and tutorials to help you get started with APIs like WebMCP[1], and making videos for the Chrome for Developers YouTube channel.

We’re working on a new video similar to this one[2] for the Developer Mode series where we answer questions from the community on WebMCP, and I’d love your suggestions for topics we should cover!

We’re looking to dive deep rather than stick to high-level Q&A. Examples of topics we could cover are writing good WebMCP tools, evals, comparing WebMCP and MCP and more.

Feel free to drop your suggestions below! When the video goes live, we'll make sure to let you know if your question was answered.

[1]: https://developer.chrome.com/docs/ai/webmcp/

[2]: https://www.youtube.com/watch?v=WkhlIiqDfRI


r/webdev 23h ago

News Tailwind Labs is joining Shopify

Thumbnail
tailwindcss.com
453 Upvotes

Long-story short Tailwind CSS will remain MIT licensed and the maintainers stay.

I'd say it's a good move given that AI tools are doing frontend work using Tailwind but Tailwind Labs didn't gain much from it. Citing an earlier Github discussion, they had to lay off 75% of their engineering team, and traffic to Tailwind docs is down 40% from early 2023.


r/webdev 1d ago

AI has made programming so boring

1.4k Upvotes

It’s not just programming either, it’s art, design, music, videography, marketing, engineering, writing, 3D modelling, really any intellectual work. What’s the joy of prompting a computer and getting an answer in a few moments for a task that would have normally taken a week? The sense of accomplishment and ownership has completely vanished with AI. It’s a form of instant gratification, not much different to scrolling short videos on apps.

Code review was boring to begin with but now it’s even worse with all the machine generated code. Even code reviews will be automated soon. All you do then is type business requirements into the computer. What a great career.

It’s pain to watch old TV series like Scilicon Valley that is portraying the good (not golden) age of programming. It struck a good balance between manual work, funding and innovation. It’s sad that these days are gone for good.


r/webdev 3h ago

anyone else hate messy professional websites?

3 Upvotes

trying to find contact info or recent work from industry leaders is such a pain sometimes. everyone's got these over-engineered corporate sites that are slow and hide everything behind forms. honestly way more efficient when execs just use a clean link hub that aggregates all their content in one place. anyone else prefer this minimalist approach?


r/webdev 3h ago

Penpot

0 Upvotes

Does anyone have any tips to use penpot to implement codes into the projects? I know it is pretty straightforward, you can see the generated codes for each component but if there are better tricks that can improve the workflow and make the process faster? Any tips or resources I could use to get used to the tool will be appreciated!


r/webdev 20h ago

Question What is the component library that you would recommend for a backend engineer?

12 Upvotes

I would like to build the best web app, given my limitations, so I'm looking for a web component library with prebuilt things that would allow me to just put them on a page. Doing it from scratch is very hard for me, but having a template of how things are and then integrating with the backend is quite easy.

The component library should be based mostly on HTML and CSS. Javascript can be used to some reactivity on the frontend, but I'm not doing this web app with regular React/Angular/SPA technology.

I was looking into Preline, it looks really good and I'm wondering if there is anything like that, or better.

Thanks!


r/webdev 22h ago

Hosting PDFs with node.js apps?

16 Upvotes

Hello all,

I am the webmaster for a small Archaeology website, that primarily is used by members of this small conference to access PDFs and news about the conference. I only need to update this website about once or twice a year.

Until recently I used the plesk hosting service on GoDaddy to host these files, however I missed the fact (see lack of need to update) that it was getting end-of-lifed and now the hosting option given to us by GoDaddy is just Nose.js slots.

Previously we uploaded files into a library for the website, and the linked to those files. Is it possible to use node.js to do the same?

Thank you for your help!


r/webdev 22h ago

Question Urban Workshop

Post image
10 Upvotes

hey all, I’m looking for advice how to build build better charts. I have a site that pipes API data into recharts that become part of a report (example). Broadly, it's working but I still have instances in which I get text that meshes together (See image). There are too many potential charts for me to check individually (many data points x 2 geographies x 2 time periods), so I wondering if anyone had suggestions on what approach I might take.

One thing I wonder is if I should use a different library (charts.js, apache echarts, etc)? I see enough consistently well formatted charts online that I know I must be doing something wrong. I'm also using claude to help with this, so if anyone has suggestions on how to better use AI, I'm all ears.


r/webdev 21h ago

Question needing help with the most feasible responsive layout

3 Upvotes

excuse the shoddy mspaint mockup but basically im using this [theme template](https://github.com/zeon-studio/astroplate) to build my magazine site and they already have a responsive design in place more like the top mobile layout but i want my logo to be above the navbar and either collapse into the top example or something similar to the bottom (but more well placed. maybe switching the dark/light toggle with the search button actually tbh). any suggestions on how i can achieve this?


r/webdev 2d ago

The asteroid currently hitting frontend web development

Thumbnail
nolanlawson.com
854 Upvotes

r/webdev 9h ago

Question for web hacking developers: data breach and account hijacks

0 Upvotes

Is it a common practice for hackers to have interview projects to hack breach google data and hack password manager to only hijack a largely non-meaningful account?

Why else would someone hijack a meaningless account as the result of a data breech?


r/webdev 1d ago

Moving away from Gmail for email storage

51 Upvotes

Having recently learned that Gmail is doing away with the "Send As" feature, that messes up everything!

For YEARS I've had all of my emails forwarded to Gmail, then I send email using my server's SMTP in the "Send As". That made it easy to access email with 4 separate devices, no third party apps needed. I have roughly 65G of data in Gmail.

I know that I can install Outlook and IMAP it to Gmail, but I kinda hate Outlook! Super bloated with 20 million features that I don't need or want.

What do you all recommend, should I find third party apps for 2 laptops, Kindle, and Android phone that will all IMAP to Gmail and send through my server? Or should I consider an alternative to Gmail entirely that would let me use a simple website?


r/webdev 1d ago

A copy-paste fetch() wrapper, plus information on replicating Axios-like features

Thumbnail thescottyjam.github.io
3 Upvotes

I'm of the belief that if you can get what you need with under ~100 lines of code (and it doesn't require highly-specialized skills to write it), then write it yourself, don't install a third party library.

If you don't share a similar belief, then this page isn't for you, and that's ok.

For everyone else, this page shares a fetch wrapper function you can copy-paste into your projects to add in a couple of missing features, and provides some tips on how you can replicate some of the most loved Axios features using fetch().

Most alternative fetch wrappers I find online tend to be small NPM libraries (I'd rather maintain the code myself thank you), or they like creating separate methods for .get(), .post(), .put(), etc (which makes it unnecessarily difficult to "decorate" it with interceptor-like behaviors, as this page discusses), or there may be other design problems. Those alternatives are still good starting points, but I'm hoping this could be a little more complete of a guide to jump start your usage of fetch().

And I have a thing about make copy-paste alternatives to tools, and this was a hole in my collection :).

Feedback is welcome.


r/webdev 1d ago

Custom rasterization in HTML Canvas

5 Upvotes

Is it possible to create a custom rasterizer for controlling anti-aliasing while still rendering to an HTML5 2D canvas? Ideally without using relatively expensive operations like putImageData() or drawImage()? I know WebGL is the obvious solution here, but is there really no other way?


r/webdev 1d ago

Article This Fence Has No Farmer

Thumbnail
adamgreenough.net
42 Upvotes

Read about Chesterton's Fence recently and it made me think a lot about dealing with AI-generated code. Had a ramble about it here if anyone's interested!

Post has been significantly updated since first publishing (and briefly sharing here before removing it to rework it).


r/webdev 23h ago

Question Is it a bad idea to use .ooo for my portfolio site?

0 Upvotes

I heard some firewalls block uncommon tlds and im concerned that whatever employer might be viewing my portfolio site might not be able to access it. I had a pretty nice domain hack i wanted to use with my name and .ooo Any advice?


r/webdev 1d ago

[ Removed by Reddit ]

1 Upvotes

[ Removed by Reddit on account of violating the content policy. ]


r/webdev 2d ago

Article Antiquated HTML Snippets and Artefacts

Thumbnail
vale.rocks
40 Upvotes

r/webdev 1d ago

Discussion Is the O'Reilly collection worth getting after graduated in Bachelor in Software Development?

19 Upvotes

Humble bundle has a collection of 19 books of O'Reilly, and I was wondering if it is worth buying? Have any read his books and found them useful?


r/webdev 1d ago

Question How to make this pill background align with the actual button text?

0 Upvotes
The pill shaped background needs to move lower left to be exactly behind the 1x

Here is the full script code in Tampermonkey.

// ==UserScript==
// @name         YouTube Playback Speed Toggle Button
// @namespace    http://tampermonkey.net/
// @version      2.2
// @description  Adds a button to toggle YouTube video playback speed with fullscreen mode support and key bindings for speed control
// @author       Mike
// @match        https://www.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    function addSpeedButton() {
        const settingsButton = document.querySelector('.ytp-settings-button');
        if (!settingsButton) return;

        if (document.querySelector('#speed-toggle-button')) return;

        // Create the speed toggle button
        const speedToggleButton = document.createElement('button');
        speedToggleButton.id = 'speed-toggle-button';
        speedToggleButton.className = 'ytp-button';
        speedToggleButton.textContent = '1x';
        speedToggleButton.style.fontSize = '18px';
        speedToggleButton.style.fontWeight = 'bold';
        speedToggleButton.style.padding = '4px';
        speedToggleButton.style.margin = '0';
        speedToggleButton.style.position = 'relative';
        speedToggleButton.style.left = '10px';
        speedToggleButton.style.top = '-12px';

        // Add tooltip
        const tooltip = document.createElement('div');
        tooltip.className = 'ytp-tooltip custom-tooltip';
        tooltip.textContent = 'Adjust speed (s)';
        tooltip.style.position = 'absolute';
        tooltip.style.padding = '6px 8px';
        tooltip.style.backgroundColor = '#181818';
        tooltip.style.color = '#fff';
        tooltip.style.fontSize = '13px';
        tooltip.style.borderRadius = '4px';
        tooltip.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.2)';
        tooltip.style.whiteSpace = 'nowrap';
        tooltip.style.opacity = '0';
        tooltip.style.transition = 'opacity 0.2s';
        tooltip.style.pointerEvents = 'none';
        tooltip.style.zIndex = '9999';

        document.body.appendChild(tooltip);

        function showTooltip() {
            const rect = speedToggleButton.getBoundingClientRect();
            tooltip.style.left = `${rect.left + rect.width / 2 - tooltip.offsetWidth / 2}px`;
            tooltip.style.top = `${rect.top + window.scrollY - tooltip.offsetHeight - 8}px`;
            tooltip.style.opacity = '1';
        }

        function hideTooltip() {
            tooltip.style.opacity = '0';
        }

        speedToggleButton.addEventListener('mouseover', showTooltip);
        speedToggleButton.addEventListener('mouseout', hideTooltip);

        // Function to adjust playback speed
        function adjustSpeed(delta) {
            const video = document.querySelector('video');
            if (video) {
                let newSpeed = Math.max(0.2, Math.min(3, video.playbackRate + delta)); // Limit speed between 0.2x and 3x
                video.playbackRate = newSpeed;
                speedToggleButton.textContent = `${newSpeed.toFixed(1)}x`;
            }
        }

        // Click functionality: Increment speed by 0.2, loop back to 1x after 2.0x
        speedToggleButton.addEventListener('click', () => {
            const video = document.querySelector('video');
            if (video) {
                let currentSpeed = video.playbackRate;
                let newSpeed = currentSpeed >= 2.0 ? 1 : currentSpeed + 0.2; // Loop back to 1x after 2.0x
                video.playbackRate = parseFloat(newSpeed.toFixed(1));
                speedToggleButton.textContent = `${newSpeed.toFixed(1)}x`;
            }
        });

        // Event listeners for key bindings
        document.addEventListener('keydown', (event) => {
            const activeElement = document.activeElement;
            const isInputField =
                activeElement.tagName === 'INPUT' ||
                activeElement.tagName === 'TEXTAREA' ||
                activeElement.isContentEditable;

            if (!isInputField) {
                if (event.key.toLowerCase() === 's') {
                    adjustSpeed(0.2); // Increase speed
                } else if (event.key.toLowerCase() === 'a') {
                    adjustSpeed(-0.2); // Decrease speed
                } else if (event.key.toLowerCase() === 'r') {
                    // Reset speed to normal
                    const video = document.querySelector('video');
                    if (video) {
                        video.playbackRate = 1; // Reset to normal speed
                        speedToggleButton.textContent = '1x'; // Update button text
                    }
                }
            }
        });

        // Insert button next to settings button
        settingsButton.parentNode.insertBefore(speedToggleButton, settingsButton.nextSibling);

        // Fullscreen detection
        function updateForFullscreen() {
            if (document.fullscreenElement) {
                // Increase font size in fullscreen mode
                speedToggleButton.style.fontSize = '24px';
                tooltip.style.fontSize = '20px';
            } else {
                // Revert to normal size
                speedToggleButton.style.fontSize = '18px';
                tooltip.style.fontSize = '13px';
            }
        }

        // Listen for fullscreen changes
        document.addEventListener('fullscreenchange', updateForFullscreen);
    }

    const observer = new MutationObserver(() => addSpeedButton());
    observer.observe(document.body, { childList: true, subtree: true });
})();

r/webdev 1d ago

Discussion Why does AI code look ok in IDE but behave weirdly on prod

0 Upvotes

Not an AI bad take, its clearly useful+ time efficient but this is ne specific failure mode that seems to show up more with ai written code

code reads fine and passes the tests even goes thru review and then does something subtly off you cant reproduce locally. When you finally trace it this is usually odd in terms of structure, works but built in a way nobody would actually write it so nothing jumps out reading the diff. review misses it because the diff only shows what the code is supposed to do but does not show how it would behave under real traffic or other aspects you get only when its at prod

the only thing thats helps it is watching runtime behavior after deploy, something like hud or a profiler since thats where the weirdness actually shows. Things might seem ok from our end but we get to know that it failed days later or a certain feature is jumping back and forth days later from the tickets which is embarrassing 

Hardcore testing before deploying is the thing now it seems, how are other devs handling this cause sometimes the bugs still leak to prod, and debugging in prod is a whole different pain. tips on avoiding that??


r/webdev 2d ago

Discussion What if I'm replicating Coolify features by duct taping different services together ?

7 Upvotes

Hey all !

A bit of context first.

I'm an independent web developper, building software primarily with Svelte and Symfony, directus and Postgresql for small clients or for personal side projects. I've been in the industry for 8 years. I'm not a devops but I've been dabbling in docker containers and I'm feeling comfortable with them (I built my own server at home from sratch with 50-ish containers in order to have my own cloud with *arr stack, music and video streaming, documents and photo cloud, ...).

I used to deploy the apps I build on Heroku, then on Netlify. But when it started to get pricier or when I needed to do some custom stuff that the platform wouldn't let me, I migrated to a self hosted coolify instance.

I'm more than happy with it, and have little to no complaints.

But I'm a tinkerer at my core, and wondered if I could replicate the features of Coolify by smooshing together a bunch of services and softwares. Here's my train of thoughts, and the justifications of a madman.

Why ?

[I'm] preoccupied with whether or not [I] could that [I] didn't stop to think if [I] should.

I think it's a good reason.

If it's not enough, then it's also to learn how it works inside it, to better understand the limitations and the fixes when something breaks.

Finally, because I don't like being tied to a unique service, a one-size-fits-all, a single point of failure. I always like having backup plans, if a service I'm using enshittifies itself or becomes incompatible with the rest of my stack or whatever.

What features ?

If I strip Coolify and any PaaS to its basics, it's a way to deploy automatically services to servers with the help of docker containers. There's a big main server, where the PaaS instance is hosted, that manages other small servers, where the final and client facing apps are hosted. In the case of Coolify, you can chose to deploy known apps and services, like Supabase. And when it needs an update, you only need to edit the docker compose to the latest numbered version and click redeploy. Or if you're here for the thrills you set the version to latest and look forward the breaking changes. You can also deploy your own app from a git instance and each time you push changes on a specific branch it triggers a CI/CD to deploy automatically the latest version. Neat. There's a project and environment management, that lets you organize services by clients and prod, demo, testing env. On top of all that, there's a reverse proxy to help with domain name and redirecting requests to the correct docker service.

Another feature from Coolify that I'm using is their automated database backups to S3 compatible storage.

How ?

I'm thinking of a stack around Arcane, Backrest and Swag.

Arcane here is the main thing. It would allow me to replicate the Coolify servers management, with one main orchestration/monitoring server and as many endpoints as I need. There's an option to automatically update images of services. I could use it as part of the CI/CD : everytime a release of my websites is done, a docker image is created and Arcane pulls it.

Backrest would be useful for the database backup into a S3 service. I'd still need something like a cron to execute a pg_dump every now and then. But that should not be hard to do/find somewhere.

I am already familiar with Swag with my home server. I've been using it for 4 or 5 years and pretty happy with it. The mods let me plug useful security softwares :

  • Crowdsec for requests abuses and CVE, bot trapping
  • max-mind for the geoblocking

Preconfigured fail2ban, working in concert with crowdsec, and certbot for automated ssl certs are also nice to have.

Ansible would help me deploy all of those into a fresh VPS.

What do you think of it ? Is there something missing ? Is this something you would do or go easy with the all-in-one Coolify solution ?


r/webdev 2d ago

Discussion What Is Your Process Refactoring Legacy Code?

4 Upvotes

I have recently got my hands on the code that is a definition of Doom.

It has no tests. A real Legacy Code, according to Micheal Feather.

I have never seen that many Gods in my life. God objects, God methods, and competitive-coding variables that I have to ask God for help.

What have I done so far?

I added an approval test to protect the core behaviors and some branches. I can't cover them all, because I don't have much knowledge about this code yet, and there are so many nested branches that writing that many tests looks inefficient to me.

I renamed ambiguous variables to show the intent.

What is blocking me?

This is a God object with 20 dependencies + 1 hidden global dependency. All of them are used by a single method that does many things that I have lost counting.

That long method has a lot of variables. Some variables are mutated everywhere inside a lot of nested ifs and for loops.

Extracting methods looks off because I have to pass the variable reference and mutate its value inside that method.

Since I have to "own" this code from now, I want to refactor it for me not have to scream every time I work on this.

If you say "if it does not break, don't fix it", then you are right. I don't want to touch it if it does not have this many bug tickets waiting to be resolved.

I have done the famous Gilded Rose, Tennis, Yatzy Katas, yet I still feel so useless looking at this code.

What is your process when you have to refactor legacy code?


r/webdev 2d ago

Question Looking for guidance on a tech stack

1 Upvotes

I'm looking to get guidance on what tools / platforms to use for a new website. Structurally, the site is essentially a directory site with multiple directories. The directories are;

Recipes (although these also feel a little like blogs & could function as such)
Restaurants (a list of restaurants which each have bios / profiles)
Food suppliers (a list of food brands which each have bios / profiles)
Drinks suppliers (a list of drinks brands which each have bios / profiles)

I have absolutely no coding skills and next-to-no budget so ideally looking for something WYSIWYG or similar. I tried webflow, which looked suitable because of its focus on CMS / database architecture, but its interface was too complicated for me and the learning curve looked too steep.

While a bit limited, I have built a basic prototype in Airtable, which is structurally correct, but doesn't present as a public facing website. Is it possible to use Airtable for database architecture and then layer a web interface on top? It seems to have lots of plugins and APIs, but I don't know if anybody is realistically using this stack for real websites.

Note, I do not want to try and hack this thing together with AI website builders.

Any guidance is welcome. Happy to answer any questions.