2.3 KiB
2.3 KiB
ParenScript Conversion Experiment
Overview
This branch experiments with converting all JavaScript files to ParenScript, allowing us to write client-side code in Common Lisp that compiles to JavaScript.
Goals
- Replace all
.jsfiles with ParenScript equivalents - Maintain same functionality
- Improve code maintainability by using one language (Lisp) for both frontend and backend
- Take advantage of Lisp macros for client-side code generation
Current JavaScript Files
static/js/admin.js- Admin dashboard functionalitystatic/js/auth-ui.js- Authentication UIstatic/js/front-page.js- Front page interactionsstatic/js/player.js- Audio player controlsstatic/js/profile.js- User profile pagestatic/js/users.js- User management
Implementation Plan
Phase 1: Setup [DONE]
- Add ParenScript dependency to
asteroid.asd - Create
parenscript-utils.lispwith helper functions - Create experimental branch
Phase 2: Convert Simple Files First
- Convert
auth-ui.js(smallest, simplest) - Convert
profile.js - Convert
users.js
Phase 3: Convert Complex Files
- Convert
player.js(audio player logic) - Convert
front-page.js(pop-out player, frameset mode) - Convert
admin.js(queue management, track controls)
Phase 4: Testing & Refinement
- Test all functionality
- Optimize generated JavaScript
- Document ParenScript patterns used
Benefits
Code Reuse
- Share utility functions between frontend and backend
- Use same data structures and validation logic
Macros
- Create domain-specific macros for common UI patterns
- Generate repetitive JavaScript code programmatically
Type Safety
- Catch more errors at compile time
- Better IDE support with Lisp tooling
Maintainability
- Single language for entire stack
- Easier refactoring across frontend/backend boundary
ParenScript Resources
Notes
This is an EXPERIMENTAL branch. The goal is to evaluate ParenScript for this project, not to immediately replace all JavaScript.
If successful, we can merge incrementally, one file at a time.