Skip to content
Anton Wiklund edited this page Apr 17, 2025 · 21 revisions

Welcome to the Solid Memo wiki!

Product Vision

Our mission is to create a digital tool that accelerates learning while protecting user privacy, integrity, and security. We aim to empower individuals to learn at their own pace without compromising their personal data or online safety. This tool will contribute to the decentralization of the web, ensuring users retain ownership of their data and experiences in a secure, open, and inclusive digital environment.

Product Goals

  1. Personal integrity:
    Ensure that all user interactions and data management adhere to the highest ethical standards, empowering users to control and manage their digital presence with confidence.
  2. Privacy Preservation:
    Develop and implement robust privacy features, ensuring that users' data is protected from unauthorized access, sharing, and exploitation.
  3. Transparency:
    Maintain complete transparency in product planning, development, operations, and business practices to foster trust and confidence among users.
  4. Decentralize the web:
    Support the decentralization of the World Wide Web, reducing reliance on centralized entities and giving users more control over their digital environments.
  5. Open Source Software:
    Make the software open-source, allowing users and developers to freely access, modify, and contribute, thereby promoting innovation and collaboration within the community.
  6. Accessibility:
    Prioritize inclusive design to ensure the product is accessible to users of all abilities and technical skill levels, supporting diverse needs and ensuring equal access.
  7. High-Quality and Reliable Software:
    Deliver a stable, secure, and reliable product with regular updates and continuous improvements to meet the evolving needs of users.
  8. Sustainable Product Growth:
    Establish a sustainable business model that supports the long-term growth and evolution of the product while remaining true to the core values of privacy, integrity, and openness.
  9. Ease of Use:
    Create an intuitive user interface that simplifies the experience, ensuring that even non-technical users can easily navigate and benefit from the software.

These goals will guide each phase of product development, ensuring that the product aligns with user values, serves a diverse and inclusive audience, and contributes to building a healthier, more decentralized digital future.

Glossary

Term Description
User A person who ultimately uses or benefits from the product, typically after it has been developed and made available for consumption
Contributor A person who voluntarily adds code, documentation, or other improvements to an open-source project
Maintainer A person who manages, updates, and oversees the development of an open-source software project, ensuring its continued growth and proper functioning
Owner A Product Owner of an open-source software project responsible for defining the project’s vision, prioritizing features, engaging with the community, and ensuring the software meets the needs of users and contributors
Actor An individual or entity interacting with the system (e.g., User, Contributor, Maintainer, Owner)
Requirements Specifications that serve as the foundation for development. They can be categorized into user stories, functional requirements, and technical requirements
User Story Descriptions of user needs and expectations in a simple, non-technical format. These help prioritize features that deliver value to the user
Functional Requirement Specifies the behaviors and capabilities that the software must exhibit to meet user needs
Technical Requirement Defines the underlying systems, architectures, and technologies necessary to support the software’s functionality
Spaced Repetition A learning technique where items that are frequently forgotten are reviewed more often, while those that are well-remembered appear less frequently
Decentralized Web A concept where control is distributed among many entities rather than being centralized in a single authority, enhancing privacy and user control
Open Source Software Software that is made available with a license that allows anyone to view, modify, and distribute the source code
Accessibility Ensuring the product is usable by people with diverse abilities, ensuring equal access for all
Privacy Preservation Developing features to protect user data from unauthorized access, sharing, or exploitation
Transparency Maintaining openness in product development, operations, and business practices to build trust with users
Personal Integrity Ensuring user interactions and data management adhere to high ethical standards, enabling users to control their digital presence
Sustainability Creating a sustainable model for the product’s growth, ensuring it evolves while maintaining core values of privacy, integrity, and openness
Ease of Use Designing the product with a simple, intuitive user interface to ensure it is accessible and usable by non-technical users
Data Ownership The concept that users retain control over their personal data and decide how and when it is shared or used
Progress Tracking A feature that allows users to monitor their learning and achievements over time
Offline Access The ability for users to continue using the product and studying even when they are not connected to the internet
Adaptive Learning An approach that customizes the content and difficulty level based on the user's learning speed
Flashcards A tool for learning where information is presented on cards, typically with a question on one side and the answer on the other, used for self-testing and memorization
Decks Collections of related flashcards grouped together, allowing users to organize their study material based on topics or themes
Mini-Games Small, interactive games integrated into the app to make learning more engaging and enjoyable
Rewards System A feature that offers users incentives such as badges, points, or milestones to encourage and motivate continued engagement and achievement
Community Engagement Encouraging users to interact, share their progress, and learn together in a supportive environment, whether through social media or an internal app community
Continuous Integration (CI) A development practice where code changes are automatically tested and integrated into the project’s codebase to ensure compatibility and functionality
Continuous Deployment (CD) A practice of automatically deploying changes to the product after passing tests, enabling quicker updates and iteration
Unit Testing The process of testing individual components or functions of a software to ensure they work as expected in isolation
Changelog A record of all significant changes made to the project, which provides transparency and helps users and contributors track updates, bug fixes, and improvements
Onboarding A process that introduces new users to the key features of the app, helping them get started and understand how to use the product effectively
Version Control A system that tracks changes to the codebase or data, allowing developers to collaborate and keep a history of updates and changes made to the project
Code of Conduct A set of rules outlining the acceptable behaviors and standards for contributors and community members to ensure a respectful and productive environment
Governance Model A system that defines how decisions are made within the project, clarifying who has authority and how contributors can influence the direction of the project
API Application Programming Interface, a set of protocols that allow one software application to interact with another
UI/UX Design The process of designing the user interface (UI) and user experience (UX) to ensure the product is visually appealing and intuitive
Technical Debt The concept of accumulated work that needs to be done to improve or refactor the codebase in order to maintain the software’s quality and avoid future complications

Requirements

Requirements serve as the foundation upon which the entire development process is built. They can be broadly categorized into user stories, functional requirements, and technical requirements. User stories describe the end user's needs and expectations in a simple, non-technical format, helping to prioritize features that deliver value. Functional requirements outline the specific behaviors and capabilities that the software must exhibit to meet user expectations, while technical requirements define the underlying systems, architectures, and technologies necessary to support the software’s functionality. Together, these requirements guide developers, designers, and stakeholders throughout the development lifecycle, ensuring that the final product meets both user needs and technical specifications.

User stories

User stories drive functional requirements by capturing the high-level goals and needs of the user, which then guide the development of detailed system specifications.

Identifier Actor Rule Benefit Milestone
US1 User I want to accelerate my learning process So that I can apply my new skills more quickly
US2 User I want the software to have an intuitive user interface So that I can navigate and use it efficiently without a steep learning curve
US3 User I want to create flashcards of things I want to learn So that I can regularly review and memorize them 1.0.0
US4 User I want flashcards that I remember well to appear less often So that I can focus my study time on flashcards that I struggle to remember 1.0.0
US5 User I want to track my progress over time So that I can see how much I’ve improved and stay motivated
US6 User I want to set personalized learning goals So that I can tailor my experience to match my own pace and focus areas
US7 User I want to be able to share my progress and achievements with others So that I can join a community of learners and encourage each other
US8 User I want the app to adapt to my learning speed So that it can present content at the right level of difficulty as I improve
US9 User I want to have offline access to my flashcards So that I can continue learning even when I don’t have an internet connection
US10 User I want to receive personalized reminders So that I can stay consistent with my learning schedule and not forget to review my flashcards
US11 User I want to have a spaced repetition algorithm So that the flashcards I struggle with appear more frequently, while the ones I’ve mastered appear less often 1.0.0
US12 User I want the app to provide challenges or mini-games related to flashcards So that I can make learning more fun and engaging
US13 User I want to have customizable themes and layouts So that I can personalize the app to my liking and make it more visually appealing
US14 User I want the app to track my retention rate So that I can see how well I’m remembering the flashcards I’ve learned
US15 User I want to be able to track my time spent studying So that I can see how much effort I'm putting into learning and adjust my study habits accordingly
US16 User I want to be able to review my flashcards in a random order So that I can ensure I’m not memorizing the sequence of cards but actually learning the content 1.0.0
US17 User I want to be able to sync my progress across devices So that I can continue my studies on any device without losing track of where I left off
US18 User I want to set daily or weekly goals for new flashcards So that I can pace myself and avoid feeling overwhelmed by too much new information at once 1.0.0
US19 User I want the app to have a dark mode So that I can study comfortably for long periods without straining my eyes
US20 User I want to be able to quickly search for flashcards or topics So that I can easily find specific content I need to review 1.0.0
US21 User I want to have an easy way to create, edit and delete flashcards So that I can keep my content up-to-date and relevant 1.0.0
US22 User I want to be able to reset or start over with my progress So that I can review everything again from the beginning if I feel the need
US23 User I want to earn rewards, badges, or points for completing milestones or achieving learning goals So that I can stay motivated and celebrate my learning achievements
CS1 Contributor I want to easily track the status of my contributions So that I can see when my changes have been reviewed, merged, or if further work is required
CS2 Contributor I want a clear and well-documented codebase So that I can understand the project's purpose, setup, and contribution guidelines quickly
CS3 Contributor I want an active issue tracker So that I can find tasks or bugs to work on, ask for clarification, and track progress on issues
CS4 Contributor I want the repository to have a code of conduct and contribution guidelines So that I understand how to contribute respectfully and efficiently
CS5 Contributor I want to have access to unit tests and continuous integration (CI) setup So that I can run tests locally and verify that my code changes do not break anything before submitting a pull request 1.0.0
CS6 Contributor I want detailed issue descriptions and steps to reproduce bugs So that I can effectively work on fixing them
CS7 Contributor I want to receive timely feedback on my pull requests So that I can improve my contributions and learn from experienced developers
CS8 Contributor I want to be acknowledged for my contributions through a CONTRIBUTORS.md file or changelog So that my work is recognized in the community
CS9 Contributor I want a well-maintained list of open issues, prioritized by importance and difficulty So I can choose tasks that match my skill level and interest
CS10 Contributor I want the maintainers to be responsive to my pull requests and questions So that I don’t have to wait too long before receiving feedback and can keep the momentum going
MS1 Maintainer I want to manage user contributions effectively So that I can ensure the product stays organized and high-quality
MS2 Maintainer I want to automate repetitive tasks (e.g., testing, deployment) So that I can focus on higher-priority issues and avoid manual errors 1.0.0
MS3 Maintainer I want to ensure that documentation is up-to-date So that users and contributors can easily understand how to use and contribute to the project
MS4 Maintainer I want to ensure that all security vulnerabilities are quickly addressed So that the project remains safe and reliable for users and contributors 1.0.0
MS5 Maintainer I want to provide thorough testing (unit tests, integration tests, etc.) So that new features don’t break existing functionality and the app remains reliable 1.0.0
MS6 Maintainer I want to regularly update dependencies and security patches So that the app remains secure, stable, and compatible with the latest technologies 1.0.0
MS7 Maintainer I want to provide a clear contribution guide and process So that external contributors can easily understand how to submit patches, report bugs, and suggest features
MS8 Maintainer I want to optimize the app’s localization and internationalization So that Solid Memo can be easily translated and adapted to other languages
MS9 Maintainer I want to keep an active changelog and versioning system So that users and contributors are aware of new releases, updates, and improvements
MS10 Maintainer I want to provide a roadmap for the project So that contributors and users know what features and improvements are planned for future releases
MS11 Maintainer I want to ensure that Solid Memo supports continuous integration/continuous deployment (CI/CD) So that we can automate the testing, building, and deployment processes for faster iteration 1.0.0
MS12 Maintainer I want to provide detailed analytics for app usage (anonymized) So that I can identify which features are most used and what areas need improvement
MS13 Maintainer I want to establish a clear versioning strategy (e.g., semantic versioning) So that users can easily understand the nature of updates (major, minor, or patch releases)
MS14 Maintainer I want to ensure that the app follows best practices for code quality (e.g., linting, formatting, and style guides) So that the codebase remains consistent and easy to maintain
MS15 Maintainer I want to establish clear guidelines for handling pull requests (PRs) So that contributors can follow best practices when submitting code
MS16 Maintainer I want to implement a system for automatic security audits So that any potential vulnerabilities are detected early in the development process 1.0.0
MS17 Maintainer I want to ensure that Solid Memo is compatible with various operating systems (Linux, macOS, Windows) and web browsers (Chrome, Firefox, Safari) So that all users can have a seamless experience
MS18 Maintainer I want to create a system for tracking long-term technical debt So that it is addressed in a structured and sustainable way over time
MS19 Maintainer I want to foster a welcoming and inclusive community So that people of all backgrounds feel encouraged to contribute to Solid Memo
MS20 Maintainer I want to implement an easy-to-use version control system for the app’s data (e.g., flashcards, user progress) So that users can track changes to their content and restore it if necessary
MS21 Maintainer I want to provide a process for deprecating and removing outdated features So that the app remains focused, clean, and up-to-date with user needs
OS1 Owner I want to actively engage with the community So that I can build a loyal, active user base and foster collaboration
OS2 Owner I want to define and communicate the long-term vision of Solid Memo So that contributors and users can align their contributions and expectations with the project’s goals
OS3 Owner I want to evaluate the project’s performance regularly So that I can make informed decisions on scaling the project and improving its impact
OS4 Owner I want to ensure that Solid Memo is accessible to users in multiple languages So that we can expand our user base globally and meet the needs of a diverse audience
OS5 Owner I want to reward active contributors (e.g., through recognition, community shout-outs) So that we can incentivize and maintain motivation within the community
OS6 Owner I want to implement a sustainable funding model for Solid Memo So that we can support ongoing development, cover operational costs, and pay contributors
OS7 Owner I want to set up a transparent budget and financial tracking system So that contributors and the community can see how funds are being allocated
OS8 Owner I want to establish a code of conduct for the project So that all contributors and community members understand the expectations for respectful and professional behavior
OS9 Owner I want to create a clear governance model for the project So that contributors understand decision-making processes and how they can influence the direction of Solid Memo
OS10 Owner I want to develop a clear marketing strategy for Solid Memo So that we can attract more users and contributors while promoting the values and benefits of the project

Functional requirements

Functional requirements are driven by user stories as they outline the user's needs and goals, which guide how the system should behave. The functional requirements translate these high-level expectations into precise specifications, detailing the system's actions and processes to meet those needs.

Identifier Description Linked Requirement(s) Milestone
FR1 The app must support user-generated flashcards with text on the front and back US3, US21 1.0.0
FR2 The app must allow the user to create, edit, or delete flashcards US21 1.0.0
FR3 The app must include a study interface for users to review flashcards in a selected deck. US3, US11, US16 1.0.0
FR4 The app must offer pre-made flashcard decks based on popular topics or skills
FR5 The app must use spaced repetition to schedule flashcard reviews for optimal memorization US11, US4 1.0.0
FR6 The app must track review accuracy, number of sessions, and retention rates for each deck
FR7 The app must allow users to set daily or weekly study targets and track progress toward these goals
FR8 The app must provide a clear and easy-to-understand navigation system with a minimal number of steps to reach key features
FR9 The app must ensure a consistent layout across all screens, with familiar elements (like buttons, icons, and menus) placed in standard locations
FR10 The app must automatically adjust its interface for different screen sizes, ensuring usability on both mobile and tablet devices
FR11 The app must include an optional onboarding guide that introduces key features and navigation to new users
FR12 The app must highlight important actions (e.g., create, edit, save) with prominent and clearly labeled buttons
FR13 The app must provide visual feedback (e.g., animations, color changes) when a user interacts with UI elements (like buttons, sliders, or inputs)
FR14 The app must use simple, recognizable icons and clear labels for navigation and actions to reduce confusion
FR15 The app must include a search bar and shortcuts for users to quickly locate flashcards, decks, and other features US20 1.0.0
FR16 The app must allow users to adjust interface themes for visual comfort and accessibility
FR17 The app must minimize the chance of user error, and when errors do occur, it must display clear, helpful error messages
FR18 Users must be able to share their study progress (e.g., completion percentages, mastered topics) via social media or within the app’s community
FR19 Users must have the option to create public profiles that showcase their progress, achievements, and overall learning journey
FR20 The project must have automatic unit testing 1.0.0
FR21 The project must have automatic integration testing 1.0.0
FR22 The project must include a Continuous Integration (CI) pipeline 1.0.0
FR23 The project must support Continuous Deployment (CD) 1.0.0
FR24 The project must run automatic security audits on dependencies 1.0.0
FR25 The project must block pull requests with critical vulnerabilities 1.0.0
FR26 The project must include a regular job to update dependencies 1.0.0
FR27 The app must allow users to gracefully migrate their user generated data 1.0.0
FR28 The app must allow users to group flashcards into named decks 1.0.0

Technical requirements

Technical requirements specify the technical aspects and constraints needed to build and support a system. They include details like hardware, software, performance standards, security protocols, and integration with other systems, ensuring that the solution is feasible, scalable, and compatible with existing infrastructure. These requirements focus on the "how" from a technical standpoint to ensure proper implementation and operation.

Identifier Description Linked Requirement(s) Milestone
TR1 User authentication 1.0.0
TR2 Personal data storage FR1, FR2, 1.0.0
TR3 Versioned data models FR1, FR2 1.0.0
TR4 Spaced repetition algorithm FR5 1.0.0
TR5 User interface for deck study FR3 1.0.0
TR6 User interface for browsing flashcards FR15 1.0.0
TR7 User interface for browsing decks FR2 1.0.0
TR8 User interface for editing flashcards FR28 1.0.0
TR9 User interface for editing decks FR2 1.0.0
TR10 CI pipeline job for unit tests FR20 1.0.0
TR11 CI pipeline job for integration tests FR21 1.0.0
TR12 CD pipeline job for release deployment FR23 1.0.0
TR13 Automatic dependency upgrades FR26 1.0.0
TR14 Automatic vulnerability scanning FR24, FR25 1.0.0
TR15 Automatic migration of data models FR27 1.0.0
TR16 Automatic release tagging (semantic versioning) FR23 1.0.0

Architecture

The architecture of our software is designed to be modular, scalable, and easy to extend. At its core, the application follows a layered architecture pattern, with clear separations between different components such as the user interface, business logic, and data access layers. This separation ensures that each component can be developed, tested, and maintained independently, which not only improves code quality but also allows for easier customization and integration with other systems. The system is built using well-established design principles and patterns to ensure long-term maintainability and adaptability as the project grows.

Technical stack

To be determined...