All projects

git show 7b900f3 3 / 18

pr0p0ll

Polls for the pr0gramm community, with target groups and analysis. Taken over from its previous operator and rebuilt with Laravel and Filament.

branch
apps
type
Community,Polls
stack
Laravel,Filament,Livewire,Vue.js
stars
★ 15 as of 28.10.2026
ci
dusk.yml,pest.yml,code-styling.yml
license
AGPL-3.0
release
1.3 on 03.08.2026
commit
7b900f3
livepr0p0ll.comcaptured on 21.10.2026
Live view of pr0p0ll.com, captured on 21.10.2026
README.md

Polls for pr0gramm

pr0p0ll lets members of the pr0gramm community create and answer polls. They sign in with their existing pr0gramm account.

I took over the project from its previous operator and developed the new platform with Laravel and Filament.

Form builder and target groups

A poll can contain several question types. Its creator decides who can participate: the public or specific user groups.

Once a poll closes, its results can be viewed and filtered by demographic information.

Source code

The application uses Laravel, Filament, Livewire and Vue. The GitHub repository contains the application and an overview of its features.

Technical structure

Explore each part directly in the repository.

  1. 7b900f3PollFormService.php

    Questions as a form

    PollFormService maps stored question types to Filament fields, from multiple choice to dates and numbers.

    View source code
    Show codeHide code
    app/Services/PollFormService.php 7b900f3
    public function buildForm(): array
    {
        $form = [];
        $this->poll->questions->each(function (Question $question) use (&$form) {
            $form[] = $this->createField($question);
        });
    
        return $form;
    }
    Lines 48 to 56 of 115, full file on GitHub
  2. 7b900f3TargetGroupService.php

    Define the target group

    TargetGroupService maps configured criteria to database queries and can check eligibility to participate.

    View source code
    Show codeHide code
    app/Services/TargetGroupService.php 7b900f3
    public static function calculateTargetGroupFromBuilder(array $aBuilderData): int
    {
        $aTargetGroupData = self::builderDataToArray($aBuilderData);
    
        return self::baseQuery($aTargetGroupData)->count();
    }
    Lines 13 to 18 of 85, full file on GitHub
  3. 7b900f3PollResultService.php

    Analyse responses

    PollResultService calculates results for each response type, such as choice percentages, numerical distributions or grouped text.

    View source code
    Show codeHide code
    app/Services/PollResultService.php 7b900f3
    public function getQuestionResults(): array
    {
        $aResults = [];
        foreach ($this->poll->questions as $question) {
            $aResults[$question->getKey()] = $this->buildQuestionResult($question);
        }
    
        return $aResults;
    }
    Lines 83 to 91 of 509, full file on GitHub
Next project Stromberg API apps Own project,JSON API