A modern, minimalist slide presentation tool powered by simple configuration files.
- Config-driven: Define your entire presentation in a simple JavaScript/JSON configuration
- Flexible layouts: Single-content slides or split layouts (horizontal/vertical)
- Multiple split ratios: 50/50, 25/75, or 75/25 splits
- Text and images: Support for both text content and images
- Presenter notes: Console-based hints and notes system
- Keyboard navigation: Arrow keys, spacebar, Home/End support
- Smooth animations: Modern CSS transitions between slides
- Responsive design: Works on different screen sizes
- Accessible: ARIA labels and keyboard-friendly
- Modern tech stack: ES6+ modules, Vite build system, CSS variables
# Clone the repository
git clone https://github.com/faso/masayo.git
cd masayo
# Install dependencies
npm install
# Start development server
npm run devnpm run buildThe optimized files will be in the dist/ directory.
Edit src/config.js to define your slides:
export const config = [
{
type: 'single',
content: {
type: 'text',
value: 'Your slide content here'
}
},
{
type: 'split',
orientation: 'horizontal',
split: '50/50',
content: [
{
type: 'text',
value: 'Left side'
},
{
type: 'image',
value: '/your-image.jpg'
}
]
}
];single: Full-width contentsplit: Split into two sections
-
text: Text content{ type: 'text', value: 'Your text here' }
-
image: Image from the public folder{ type: 'image', value: '/image.jpg', alt: 'Optional description' }
When using type: 'split', you can specify:
orientation:'horizontal'or'vertical'split:'50/50','25/75', or'75/25'
Add a hint property to any slide for presenter notes:
{
type: 'single',
content: { type: 'text', value: 'Slide content' },
hint: 'Remember to mention the key points here!'
}Hints appear in the browser console (F12) during your presentation.
- Arrow Left/Up: Previous slide
- Arrow Right/Down: Next slide
- Spacebar: Next slide
- Home: First slide
- End: Last slide
Place your images in the public/ folder and reference them with a leading slash:
{
type: 'image',
value: '/my-image.jpg'
}masayo/
βββ public/ # Static assets (images, etc.)
βββ src/
β βββ config.js # Your presentation configuration
β βββ main.js # Application entry point
β βββ slideNavigation.js # Navigation logic
β βββ slideRenderer.js # Slide rendering
β βββ styles.css # Styles
βββ index.html # HTML template
βββ package.json # Dependencies and scripts
βββ README.md # This file
Edit CSS variables in src/styles.css:
:root {
--font-family: 'Jost', sans-serif;
--font-size-base: clamp(1.5rem, 4vw, 3rem);
--slide-bg: #ffffff;
--text-color: #000000;
--transition-speed: 0.3s;
}You can load configurations from external JSON files:
// In src/main.js, replace the import with:
const response = await fetch('/presentation.json');
const config = await response.json();-
Dual Screen Setup:
- Open your presentation on the main screen
- Detach the browser console (F12) and move it to a secondary screen
- You'll see presenter notes and the next slide preview
-
Fullscreen Mode: Press F11 for fullscreen presentation
-
Practice Mode: Navigate through your presentation with the console open to see all hints
Masayo works in all modern browsers that support:
- ES6 modules
- CSS Grid and Flexbox
- CSS custom properties (variables)
The original Reader/index.html has been modernized with:
- Separate module files for better organization
- Modern ES6+ syntax
- Improved accessibility
- CSS variables for easy theming
- Better keyboard navigation (added spacebar, Home, End)
- Smooth animations
- Development server with hot reload
Your old configs can be migrated by copying the config array to src/config.js.
# Start dev server with hot reload
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewMIT
Contributions are welcome! Please feel free to submit a Pull Request.
Created by faso