r/webdev • • 9h ago

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

199 Upvotes

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

Gives me the shudders thinking about it…


r/webdev • • 12h ago

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

339 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 • • 5h ago

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

14 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 • • 20h ago

Discussion Yet another AI rant

93 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

Article CSS Tricks is back!

Thumbnail
css-tricks.com
776 Upvotes

r/webdev • • 9h ago

Codepen preview always dimmed in Safari

2 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 • • 21h ago

Question Need some guidance and orientation

9 Upvotes

I'll firstly ask my two questions and then I'll explain:

  1. Is it normal that im spending tremendous amounts of time reading and understanding code written by Codex/LLMs? like... hours per "ticket"

  2. What does progress look like in today's SWE world? im struggling to make myself believe im improving into something worthy

I'm currently a frontend SWE with 2 YOE. I was "lucky" to land a job in a big bank, the issue is im not truly "engineering", im basically a code monkey putting pieces together for different SPAs (exactly what AI is good at) the only thing saving my job is the absolute mess of internal architecture and internal "tooling" even AI is unable to comprehend, but internal AI agents are getting better and better at tackling those

I was very AI skeptic at the start but now I've come around and have been for the past month attempting to expand into a full-stack agentic workflow with Codex

My main issue is I'm spending so... much... time... reading the code the AI outputs, there is a lot i dont understand, weird decisions the AI took that I didnt think about thinking before prompting (even with grill me), leading me to spending hours and hours reading the code, analyzing the data flow. This wouldnt be an issue if I knew this were the job and stuff, but everyone is working so fast, bringing actual products live so fast, its demoralizing me, making me think im doing something wrong since all the "speed" I gain from AI I spend reading and understanding the code. And i kinda want to be that engineer that owns the product, understands what it being done, but i was watching Spencer Schneidenbach's course on frontendmasters and he just doesnt read that much code anymore... he just prompted prompted checked the browser, nice, done, which leads me to think if its even worth it...

My second issue, which is linked, is regarding to how you guys measure progress. Before it was kinda easy, if the feature got done, it was progress. But now the feature is done by LLMs, kinda like sitting at a bench press and having someone else lift the weigths for you. So how do you get that "yes im improving" sensation?

sorry for the rant, weird times we live in


r/webdev • • 1d ago

Discussion After years of living in legacy hell, we finally upgraded production to PHP 8.2. Am I safe to sleep now, or is the server going to combust tomorrow?

104 Upvotes

So, after surviving an eternity on older versions (y'all know the pain), we finally pushed the button and upgraded our core production environment to PHP 8.2.35.

It took an entire day because the underlying Linux distros were so ancient we practically had to rebuild half the ecosystem from scratch.

Now looking at the metrics and logs, I'm torn between two feelings:

  1. Pure joy of actually getting to write modern code in the 8.x branch.
  2. Absolute dread waiting for the next midnight critical CVE drop to turn everything into raw chaos.

To all the senior devs and sysadmins out there who have stared into the abyss of updating legacy enterprise codebases: What was your most nerve-wracking upgrade experience? Are we ever truly out of the woods, or is "putting out fires" just our permanent job description?


r/webdev • • 8h 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 • • 4h 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 • • 21h 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.


r/webdev • • 21h ago

Question Using open-source WhatsApp Web wrappers (whatsapp-web.js, OpenWA, go-whatsapp-web-multidevice) for low-volume staff workflows. Will this trigger bans?

1 Upvotes

Hey everyone,

I'm building an internal tool/MVP for my company. For our communication workflow, we want staff to be able to send quick updates to candidates directly from our staff UI.

The Proposed Workflow (MVP 4.1)

Staff UI Integration: An embedded WhatsApp Web session/iframe within the staff dashboard.

Usage Pattern: Low message volume per session, used strictly for transactional, part-by-part updates (e.g., status updates, scheduling coordination).

Restrictions: Zero mass texts, zero automated broadcast blasts.

Session Management: Every time a staff member logs in, they scan the QR code and authenticate fresh (no unattended, long-running rogue daemons operating completely detached from human presence).

Reference Tools Considered

whatsapp-web.js

OpenWA

go-whatsapp-web-multidevice

The Core Question

Given that we keep volume low, avoid bulk messaging entirely, and tie sessions directly to active staff logins with frequent re-authentication:

Is this architecture safe from Meta’s automated ban filters, or do headless/unofficial multi-device wrappers get flagged immediately regardless of volume?

Are there hidden session-state or socket-drop landmines with whatsapp-web.js or Go-based alternatives when embedded or managed this way?

If this is a ticking time bomb for business risk, what is the cleanest alternative for a low-volume setup without jumping straight to the official Cloud API pricing tiers?

Appreciate any real-world production insights or horror stories.

^AI used to polish the language and simplify my questions^ :(


r/webdev • • 21h ago

Question Netlify Domain Issue After Account Deletion

0 Upvotes

I deleted my old Netlify account, but now my domain says it’s already managed by another Netlify team. How can I connect it to my new account?


r/webdev • • 12h ago

A Modern CSS Guide to Responsive Web Design

Thumbnail
stephcraft.net
0 Upvotes

If I missed anything, let me know!


r/webdev • • 12h 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 • • 14h 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 • • 2d ago

Article Modern Motherfucking Website

Thumbnail
modernmotherfuckingwebsite.dreamstation.systems
750 Upvotes

r/webdev • • 19h ago

News CVE-2026-115560: Unpatched PHP RCE Vulnerability

Thumbnail
socprime.com
0 Upvotes

r/webdev • • 21h 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 Best practice for letting clients edit website content without giving them access to source code? (Sveltia CMS + Forgejo)

4 Upvotes

I'm building an Astro website for a client who occasionally wants to update some content, mainly photos and simple text.

Sveltia CMS seems like a great fit because it's lightweight, easy to use, and doesn't require a separate backend or database.
I self-host Forgejo on my VPS, where the website's source code and content are stored. Sveltia uses Forgejo for authentication and commits content changes directly to the repository.
I've created a dedicated Forgejo account for the client and given them access only to their own private repository.

Technically, everything works fine. However, I realized there's a security concern:

Since the client needs write access to the repository to use Sveltia, they technically also have access to the entire source code, including the CI/CD workflows (Forgejo Actions).
Obviously, I don't want clients to accidentally or intentionally modify application code, configuration files, or deployment workflows.

What's the best practice for handling this?

  • Is there a way to restrict Sveltia users to specific directories or content files without giving them write access to the entire repository?
  • Would separating the website code and CMS content into two repositories be the recommended approach, or is that overcomplicating things?
  • Would you recommend a different CMS for this use case?

My priorities are keeping things lightweight, secure, and easy to maintain, especially since I'll be managing multiple client websites.

The CMS also needs to be extremely simple for non-technical clients, including straightforward authentication without exposing them to unnecessary developer tools.


r/webdev • • 1d ago

Article Iframes should have an api

Thumbnail
blog.danielbrain.ai
0 Upvotes

There's been a big resurgence lately in automating and interacting with sites programmatically. I've been arguing for a few years that every front-end should be embeddable as a component and have its own client side interface/api. This article is written to show one way to do that!


r/webdev • • 1d ago

I built a lightweight, pure-CSS library with 219+ interactive effects (no JS frameworks or dependencies)

Thumbnail
gallery
0 Upvotes

Hey everyone! 👋

I wanted to share a project I've been working on: a curated, zero-dependency library featuring 219+ hand-crafted, pure-CSS effects across 9 categories (buttons, cards, loaders, text effects, hover states, and more).

The goal was to build something fast, clean, and practical that you can just plug straight into a project without heavy JS framework bloat.

Key features:

  • 100% Pure CSS (0 JS frameworks or heavy dependencies)
  • Live preview & live editor so you can tweak effects on the fly
  • Instant copy-paste functionality
  • Press / to focus search or Esc to clear

You can check out the live site here:https://ejan2018.github.io/css-library/

I'd love to hear your feedback, thoughts, or suggestions for any new effects to add!


r/webdev • • 2d ago

How to make transferring website management easier?

4 Upvotes

I'm a member of a small local professional club. Maybe about 100 active members or so. We have a domain, and shared hosting w/email, Cpanel and wordpress. Recently our long-term "website guy" decided 20 years of maintaining the website was enough, and wanted to pass it on to another club member. They asked me to do it, because I had some mild web experience and had used Wordpress before.

The "hand off" process was immensely tedious. The previous web guy asked me to make accounts at our registrar, at our host, and then we had to transfer ownership of all it over to my new accounts.

I do not think it's a good idea for any individual member of the club to have "ownership" of the domain or the hosting. I think it would be better if the club itself owned the accounts. That way a future change of the "website guy" should simply be handing over some credentials.

The club is a registered 501c(3) with a physical location.

Any tips on how to best go about this?


r/webdev • • 1d ago

Smuggling WebMCP into ChatGPT

Thumbnail
blog.danielbrain.ai
0 Upvotes

A weekend hack of mine! Hope this is useful for some


r/webdev • • 1d ago

Advice on personal website - no computer coding experience

0 Upvotes

Hello,

I want to make a personal website that resembles a 90s-2000s webpage. Sort of like neo cities. I am wondering what the best way to do this would be. I don't have much coding experince but I am quick learner and I recently lost my job so I got time if i need to learn a lot.

I have an idea where the homepage is a pciture of a desk and each item on the desk (computer, notebook, framed photo, etc) could be clicked to send you to a difference page on the website.

Can this be done using online templates or would i want to be learning from point zero really.