Non fare l'errore di pensare che esista una struttura universale che va bene per tutto. Anche in azienda cambiano approccio a seconda che stiano costruendo un'app monolitica, un sistema di microservizi o una libreria. Quello che puoi fare è imparare i principi comuni e poi adattarli al tuo progetto specifico, anziché inseguire l'ultima moda dei tutorial.
La base che funziona quasi sempre è dividere il codice per responsabilità: componenti/logica UI separate dalla business logic, le API calls isolate in servizi dedicati, le utility in cartelle a parte, i test accanto al codice che testano. Se usi un framework come React o Vue, sfrutta la sua struttura naturale e aggiungi sopra una organizzazione per file di configurazione, costanti, helper. Se è vanilla JavaScript, potresti pensare a un'architettura a layer (presentazione, logica, accesso ai dati) o a moduli self-contained con scopi specifici.
Quello che importa davvero è che il tuo team (o il te stesso tra sei mesi) riesca a navigare il progetto senza impazzire. Se apri una cartella e capisci subito che cosa c'è dentro, se il nome dei file ti dice cosa fanno, se puoi trovare dove modificare una feature senza scavare ovunque, allora la struttura sta funzionando. Inizia semplice, espandi man mano che cresce il progetto, e non aver paura di fare refactoring della cartelle se vedi che la situazione diventa confusa.