Skip to content
Mommy

Mommy

Mommy (hereinafter the “Application”) is a web-based application that provides users with supportive and loving messages, optionally personalised with their name. The Application uses a Fastify-based backend server that serves both a landing page and an API endpoint, delivering encouraging phrases with configurable “mommy” personas. It is designed for ease of use, accessibility, and providing emotional support through positive reinforcement.

The Mommy application provides a simple web interface for receiving encouraging messages:

  1. Visit the Application: Navigate to the Mommy web application in your browser
  2. Optional Name Entry: Enter your name in the text field if you’d like personalised messages
  3. Request Love: Click the “I need some love…” button to receive an encouraging message
  4. Receive Your Message: A supportive phrase will appear, personalised with your name if provided
  • Personalised Messages: Over 100 unique encouraging phrases that can be personalised with your name
  • Accessibility-Focused Design: Uses OpenDyslexic font and high-contrast styling for better readability
  • Mobile-Friendly: Responsive design that works on all device sizes
  • No Registration Required: Instant access without any account creation

The application also provides a simple API:

  • Endpoint: /api
  • Method: GET
  • Optional Parameter: name (string) - Your name for personalisation
  • Response: Plain text encouraging message

Example: GET /api?name=Alex returns a personalised encouraging message.

Mommy is built using:

  • Backend: Fastify web framework (Node.js/TypeScript)
  • Frontend: Vanilla HTML/CSS/JavaScript (no frameworks)
  • Configuration: Modular phrase and persona configuration files
src/
├── index.ts # Main server entry point
├── config/
│ ├── html.ts # HTML template for landing page
│ ├── mommy.ts # Mommy persona names ("your mommy", "mama", etc.)
│ └── phrases.ts # 100+ encouraging phrase templates

The application uses Fastify to serve:

  1. Landing Page (/): Returns the complete HTML interface
  2. API Endpoint (/api): Returns personalised encouraging messages

Messages are generated by:

  1. Randomly selecting a phrase template from phrases.ts
  2. Randomly selecting a “mommy” persona from mommy.ts
  3. Interpolating {{ name }} and {{ mommy }} variables in the template
  4. Converting to lowercase and returning as plain text
  • Node.js (18+ recommended)
  • pnpm package manager
Terminal window
# Install dependencies
pnpm install
# Run in development mode with auto-reload
pnpm dev
# Build for production
pnpm build
# Run production server
pnpm start
# Run tests
pnpm test
# Lint code
pnpm lint

The server listens on port 8008 by default. For production deployment:

  1. Build the project: pnpm build
  2. Start the server: pnpm start
  3. Configure reverse proxy (nginx/Apache) if needed

Edit src/config/phrases.ts to add new encouraging messages. Use:

  • {{ name }} for user’s name interpolation
  • {{ mommy }} for mommy persona interpolation

Edit src/config/mommy.ts to add new ways mommy refers to herself.

The project includes comprehensive tests using Vitest:

  • Server endpoint testing
  • Configuration validation
  • Phrase uniqueness verification
  • HTML response validation

This software is licensed under Naomi’s Public Licence. Copyright held by Naomi Carrigan.

The application:

  • Does not store user data persistently
  • Does not use cookies or tracking
  • Processes names only for message personalisation
  • Does not log personal information

All phrases are designed to be:

  • Supportive and encouraging
  • Appropriate for all ages
  • Non-discriminatory
  • Focused on positive reinforcement
  1. Fork and Clone: Fork the repository and clone your fork
  2. Install Dependencies: Run pnpm install
  3. Create Feature Branch: git checkout -b feature/your-feature
  4. Make Changes: Implement your changes with tests
  5. Test: Run pnpm test and pnpm lint
  6. Commit: Use conventional commit messages
  7. Pull Request: Submit PR with clear description
  • TypeScript: Strict typing enabled
  • ESLint: Uses @nhcarrigan/eslint-config
  • Testing: Vitest with coverage requirements
  • Documentation: JSDoc comments for all functions

To add new phrases to src/config/phrases.ts:

  1. Follow the existing template format
  2. Use {{ name }} and {{ mommy }} placeholders
  3. Keep messages positive and supportive
  4. Ensure phrases are appropriate for all audiences
  5. Add tests to verify uniqueness

To add new personas to src/config/mommy.ts:

  1. Add family-friendly terms
  2. Ensure they work grammatically in all phrase templates
  3. Test with existing phrases
  • All new features must include tests
  • Maintain 100% test coverage
  • Test both success and error cases
  • Verify phrase interpolation works correctly
  • Follow existing code style
  • Include tests for new functionality
  • Update documentation as needed
  • Ensure all checks pass before submitting