Week #1

Week #1 #

Project Description #

Motivation #

It is 2025, there are many sources of information. Telegram chats, email notifications, real-life announcements—everything wants your attention! Because of this option hell, people get lost and frustrated. In short, “many info bad.” That’s why we decided to create a new app to rule them all!

Description #

EvOps is a self-hosted platform to share and discover local events (e.g. performances, parties, or study sessions). You can think of it as a full-stack alternative to the “Opportunities For You” Telegram channel (which it may actually become).

Our main goal for now is to integrate into the university ecosystem. If everything goes well, we may even go beyond and allow anyone to launch their own instance of EvOps.

Team Members #

Team MemberTelegram AliasEmail AddressTrackResponsibilities
(Lead) Asqar Arslanov@AsqArslanova.arslanov@innopolis.universityFull-StackMake sure the project gets finished.
Aleksandr Isupov@can4reda.isupov@innopolis.universityMobile, Design, QADesign the front end (especially, mobile), develop the Android application.
Arsen Galiev@rosehipblooma.galiev@innopolis.universityFrond-End, DevSecOps, DesignDevelop the web user interface, maintain security of the services.
Egor Pustovoytenko@egraPAe.pustovoytenko@innopolis.universityBack-End, DocumentationHelp with implementing the back end, write docs, reports.
Ilya-Linh Nguen@pickpushai.nguen@innopolis.universityDevOps, DocumentationDeploy the project, set up runtime environments, prepare the infrastructure.
Maksim Ilin@iamimdm.ilin@innopolis.universityMLWork on tag auto-assignment, implement an event recommendation system, conduct experiments to evaluate efficiency of models.
Ramil Shakirzyanov@Fulleriter.shakirzyanov@innopolis.universityMLWork on preliminary tag extraction, implement an event recommendation system, deploy the trained models.

Brainstorming #

Ideas During Brainstorming #

  1. A type-safe i18n framework with code generation.

    The concept is similar to Paraglide JS. The main difference is that we wanted to build an app not restricted to JavaScript only. This project would have high value since there are no alternatives that offer the same functionality. However, it requires a very narrow set of skills and doesn’t seem suitable for a team project.

  2. Yet another educational platform with fancy visualization of computer science concepts.

    The idea arose when reading Tanenbaum’s Modern Operating Systems book. The lack of visualization and interaction made understanding fundamental concepts complicated. However, we did not want to implement this project because education and AI are overrated nowadays. 👹

  3. Finally, today’s star—an event aggregator.

    We settled on this idea because (1) this project has easy to understand and implement requirements, (2) it incorporates different skills. We decided to take on this idea and make the best out of it. Besides, there is a need for such a service in our university, so we can already research requirements of our first potential client and try to meet them in our product.

Market Research #

Competitors #

PlatformSelf-Hosted?Authentication / Closed GroupsAdmin Controls (Moderation/Review)Open Source?MonetizationKey StrengthsKey Weaknesses
Mobilizon✅ Yes✅ Federated (multiple closed groups), SSO possible❌ Limited moderation tools✅ AGPL (fully open)🐧 Free (hosting costs only)Privacy focused, decentralizedWeak admin controls, hard to scale for large unis
Gath.io✅ Yes✅ Private groups, email-based access✅ Basic admin dashboard❌ Proprietary💰 Subscription (per-user pricing)AI-based networking, clean UIExpensive, vendor lock-in
Eventyay✅ Yes❌ Public-first (weak closed groups)✅ Event approval workflows✅ Apache 2.0🐧 Free (self-hosted)Good for ticketing and schedulingNot built for universities
CampusGroups❌ No (SaaS)✅ University SSO, org-based access✅ Full admin controls❌ Closed-source💰💰 High annual licensingTailored for student engagementExpensive, no self-hosting
Meetup.com❌ No (SaaS)❌ Public (no real closed groups)✅ Basic moderation❌ Proprietary💰 Organizer fees + adsLarge network effectNo privacy, unsuitable for universities

Conclusion #

The comparison table shows the gap in existing solutions. There is no easy-to-use open source, self-hosted system, that provides all the needed functionality.

Basic Requirements #

Target Users and Their Primary Needs #

Since our main priority is to integrate into our university’s ecosystem, the requirements are defined with respect to the administration’s (319 👋) requests. Here, we’ve split our users into several groups and tried to identify their needs:

  • Event viewers (e.g. students)
    • Smart recommendation system
    • Convenient UX / responsiveness
  • Event organizers (e.g. club leads, active students, administration)
    • Rich tools for creating events
    • Collecting attenders for an event
  • Moderators (e.g. administration, trusted people)
    • Reviewing events to be published
  • Hosters (e.g. our university)
    • Ease of hosting
    • Configurability
    • Maintainability

User Stories #

  • Event viewers (student):
    • Discover Events: as a student, I want to see upcoming events relevant to my interests (e.g., CS workshops, basketball games), so that I don’t miss opportunities.
    • One-Click Registration: as a busy student, I want to discover events in one click, so that I can quickly register for events without logging into multiple platforms.
  • Event organizer:
    • Simple Event Creation: as an event organizer, I want to create an event with title, date, location, description, and tags, so I can share it in less than five minutes.
    • Event Tracking: as an event organizer, I want to see in real time the number of attendees, so I can plan my resources.
    • Event Updates: as an event organizer, I want to notify all potential attendees if an event is cancelled or updated, so everyone will know only relevant information.
  • Moderators:
    • Content Moderation: as an admin, I want to review inappropriate events and ban abusive users, so the platform stays safe and spam-free.
    • User Role Permissions: as an admin, I want to assign roles to club leaders, so only trusted accounts can post events as clubs.

Initial Scope #

Based on our current vision for the project, we want to see the following core features:

  • Account management.
  • CRUD operations on events.
  • Feed with existing events with a recommendation system.
  • Convenient event editor.
  • Search system with filters.
  • Admin dashboard.
  • Cross-platform support.

Tech Stack #

Below are listed the main technologies we are going to use in our project.
We could say that the main criteria we valued were scalability, performance, maturity, and other nice things, (which isn’t false to be fair), but being honest, our tech stack has mainly been justified by our experience and personal preferences. We’re only students, after all!

Back End #

  • Rust: primary programming language (fast, robust, mature, fun 🦀).
  • Axum: REST web-framework with great ecosystem support.
  • Tonic: gRPC web-framework with great ecosystem support.
  • Diesel: type-safe and fast database driver.
  • PostgreSQL: battle-tested DBMS, needs no introduction.

ML #

  • Python: primary programming language with a huge ML ecosystem.
  • PyTorch: deep learning framework used to build and train neural networks.
  • Hugging Face Transformers: library providing powerful, ready-to-use versions of BERT and other advanced AI models (transformers).
  • SentenceTransformers: library for creating embeddings (vector representations) for whole sentences.
  • scikit-learn: toolkit for measuring model performance (metrics) and using standard (“classical”) machine learning algorithms.
  • pandas/numpy: essential libraries for working with data and doing math operations.
  • Jupyter: interactive notebooks for code experiments and sharing results.

Android #

  • Kotlin: primary programming language.
  • Jetpack Compose: UI toolkit.
  • Room: library for local data storage using SQLite.
  • Dagger Hilt: dependency Injection (DI) framework.
  • Retrofit: type-safe HTTP client for REST API communication.

Website #

  • TypeScript: primary programming language, JavaScript’s best version (no discussion).
  • Next.js: full-stack meta framework to build web apps.
  • pnpm: package manager, the fastest npm replacement.
  • Tailwind CSS: battle tested CSS framework to style the application.
  • Element UI: UI library for desktop web apps.
  • ConnectRPC: library for client-server gRPC communication.

DevOps #

  • Docker Compose: industry standard for orchestrating containers.
  • GitHub Actions: automated CI/CD.

Potentially: #

  • Prometheus: hardware metrics and monitoring.
  • Grafana: visualization dashboard that works well with Prometheus.
  • Kubernetes: container orchestration platform.

Notable Meeting Results #

Key Points From Meeting 1 (June 3) #

Key Points From Meeting 2 (June 5) #

  • Discussed ML services, such as the tag-assignment system and the recommendation system.
  • Came up with a system of upvotes/downvotes for posts to configure recommendations.
  • Decided to treat clubs as tags (initially, they were planned to be treated as separate entities).
  • Divided tags into “public” and “private.”
  • Agreed to give “hosters” (organizations that run an instance of our application) the right to define a preliminary set of tags.
  • Decided to take a less strict approach to the API and not establish it very early, since we need to explore the requirements better first.
  • Started to construct request/response schemas on the back end.

Key Points From the Meeting With 319 (June 10) #

  1. Comprehensive Content Moderation
    • Strict oversight of all published content.
    • Zero tolerance for low-quality or irrelevant material in public channels.
  2. Innopolis Super App Development
    • Integration of essential functionalities within a unified platform.
  3. Mandatory Communications
    • Critical announcements must remain unmuted for all users.
    • The #official tag should be auto-favorited in user profiles.
  4. User Reporting & Transparency
    • Clear process for submitting moderation complaints.
    • Constructive feedback provided upon content disapproval.
  5. Content Creation Standards
    • Established templates and guidelines for post formatting.
    • Prohibition of harmful or dangerous content.
  6. User Experience Enhancements
    • Intuitive UI with content categorization.
    • Automated language localization (e.g., Russian/English) based on user settings (potential LLM integration).
  7. Moderation Workflow
    • Dedicated staff for manual review (with potential AI/LLM assistance).
  8. User-Centric Approach
    • Regular focus group sessions to gather feedback.
    • Prioritization of utility over social networking features.
  9. Cross-Platform Integration
    • Seamless synchronization with Telegram channels.
  10. Public Access & Ethical Standards
    • Compliance with public ethics and corporate PR policies.
  11. AI-Powered Efficiency
    • Automated summaries of posts for quick consumption.

Weekly Commitments #

Individual contribution of each participant #

Asqar Arslanov #

Aleksandr Isupov #

Arsen Galiev #

Egor Pustovoytenko #

Ilya-Linh Nguen #

Maksim Ilin #

Ramil Shakirzyanov #

Ramil Shakirzyanov and Maksim Ilin #

The ML team discussed the project’s solution designs and the ways of measuring their efficiency.

Proposed Ideas

  1. Automatic Tag Extraction

    • Goal: Get a preliminary list of tags for application events
    • How: Load and preprocess messages from the Telegram channel “Opportunities For You.” Send them to a language model to retrieve post topics. Finally, manually choose the preliminary set of tags.
  2. Automatic Post Classification

    • Goal: Automatically tag posts within the application.
    • How: When a user creates a post in the application, send the post description and the preliminary tag set to a language model. The model will assign the most suitable multiple tags.
  3. Post Recommendation System:

    • Goal: Recommend relevant posts to users.
    • How:
      • Build user “good” and “bad” profiles using metadata (for example, emoji reactions to posts in the application, comments left, etc.) as a weighted sum of the vector representations of the corresponding posts.
      • For each post the user hasn’t seen and that is still relevant, calculate its “score” using a formula.
      • Recommend posts with the highest scores.
    • Notes:
      • A post is “unseen” if the user hasn’t reacted to it with an emoji.
      • “Relevant” means the event isn’t over when we make recommendations.
      • This formula is subject to change.

Measuring Effectiveness

  • For Automatic Tag Extraction and Automatic Post Classification:
    • We will verify how well the tags align with the meaning of a sample of posts taken from the “Opportunities For You” Telegram channel, logically.
  • For the Post Recommendation System:
    • We’ll give access to the Application to a test group (inside and probably outside the team).
    • Each person will focus more on a pre-agreed set of events.
    • We will assess how well the recommended posts align with the types of events people view.

Confirmation of the Code’s Operability #

We confirm that the code in the main branch:

  • Is in a working condition.
  • Runs via Docker Compose.