Symlink Architecture
Share code seamlessly between apps without npm packages or complex build configs
Project Structure with Symlinks
vicinity-app/
.envRoot environment variables
mainapp/
index.htmlSOURCEHTML entry point (SOURCE)
vite.config.jsSOURCEBuild config (SOURCE)
public/SOURCEStatic assets (SOURCE)
src/
auth/
.env→ ../.envSymlink to root .env
index.html→ ../mainapp/index.htmlSymlink to mainapp HTML
vite.config.js→ ../mainapp/vite.config.jsSymlink to mainapp config
public→ ../mainapp/publicSymlink to mainapp assets
src/
server/
Symlink
SOURCESource of truth
Folder
File
Why Symlinks?
Zero Configuration
No monorepo tools, no build config, just native filesystem
Instant Updates
Edit once, changes appear in both apps immediately
Single Source of Truth
Components, styles, and utils maintained in one place
Build Optimization
Build script resolves symlinks for production deployment
IDE Support
Full IntelliSense and navigation work perfectly
Version Control
Git tracks symlink pointers, not duplicate files
Complete Symlink Reference
| Symlink Location | Target | Type | Purpose |
|---|---|---|---|
/auth/.env | /.env | Absolute | Environment variables |
/auth/index.html | /mainapp/index.html | Absolute | HTML entry point |
/auth/vite.config.js | /mainapp/vite.config.js | Absolute | Build configuration |
/auth/public | ../mainapp/public | Relative | Static assets |
/auth/src/shared-components | ../../mainapp/src/shared-components | Relative | UI components |
/auth/src/styles | ../../mainapp/src/styles | Relative | CSS files |
/auth/src/utils | ../../mainapp/src/utils | Relative | Utilities & helpers |
Setup Commands
Create all symlinks:
cd scripts/dev && ./setup-symlinks-complete.sh
Individual symlink example:
# Create symlink for shared components ln -s ../../mainapp/src/shared-components auth/src/shared-components
Build resolves symlinks:
# Build script copies actual files, not symlinks npm run build # Result: auth/dist contains resolved files
Continue Learning
Explore more framework features