Giter VIP home page Giter VIP logo

bebras-pandai's Introduction

๐Ÿฆซ Bebras Pandai

Repositori ini berisi kumpulan "peralatan" yang digunakan untuk menunjang Tantangan Bebras Indonesia & Gerakan Pandai

Aplikasi

Bebras Pandai adalah aplikasi yang dikembangkan oleh IA-TOKI untuk mendukung pembelajaran Computational Thinking supaya lebih tersebar luas ke seluruh pelosok Indonesia. ๐Ÿ‡ฎ๐Ÿ‡ฉ๐Ÿ‡ฎ๐Ÿ‡ฉ๐Ÿ‡ฎ๐Ÿ‡ฉ


Fitur

Ada 2 fitur yang didukung & dikembangkan di aplikasi ini

  • Lihat / Cetak Materi : berisikan segala materi yang bisa Anda pelajari terkait Tantangan Bebras
  • Ikut Latihan Mingguan : mini Tantangan Bebras dengan soal (Bebras Task) yang selalu diperbarui tiap minggunya untuk mengasah kemampuan Computational Thinking Anda

Pengembangan Perangkat Lunak

Silahkan menuju app untuk mengakses direktori utama aplikasi.

Struktur Direktori

.
โ”œโ”€โ”€ .github              # github related script
โ”œโ”€โ”€ app                  # main app directory
โ”œโ”€โ”€ data                 # data for mockup, schema, etc
|   โ”œโ”€โ”€ ..
|   โ”œโ”€โ”€ materials        # materials metadata like buku bebras, podcast files, presentations, etc
โ”‚   โ””โ”€โ”€ question_bank    # example of Bebras Task data
โ”œโ”€โ”€ docs                 # contains any documentation & its supporting files
|   โ”œโ”€โ”€ ..
โ”‚   โ””โ”€โ”€ assets           # image file et al. used in the documentation
โ””โ”€โ”€ utils                # utility tools directory
    โ”œโ”€โ”€ ..
    โ””โ”€โ”€ scripts          # any script to automate the operational

Kita menggunakan arsitektur monorepo di repositori ini. Selain app sebagai direktori utama, terdapat bagian-bagian lain untuk mempermudah/mengotomatisasi operasional.

Kontribusi

Silahkan menuju CONTRIBUTING.md mengenai penjelasan cara berkontribusi.


Glosarium

Tantangan Bebras Indonesia

tautan: https://bebras.or.id/v3/
alt text

Tantangan Bebras Indonesia adalah kompetisi yang dilaksanakan secara online dan serentak dengan memberikan soal-soal yang telah dipersiapkan dalam Workshop Bebras Internasional, pada periode bebras week di minggu kedua bulan November.
Tantangan Bebras Indonesia dibagi dalam 4 kategori, yaitu:

  • siKecil, untuk siswa SD dan yang sederajat kelas 3 atau lebih muda
  • Siaga, untuk siswa SD dan yang sederajat kelas 4-6
  • Penggalang, untuk siswa SMP dan yang sederajat
  • Penegak, untuk siswa SMA dan yang sederajat

Note

Bagaimana cara ikut serta pada Tantangan Bebras?

Sekolah mendaftarkan siswanya pada Biro bebras yang daftar dan kontaknya dapat diakses di http://bebras.or.id/v3/bebras-biro/


Gerakan Pandai

tautan: https://pandai.bebras.or.id/
alt text

Kegiatan yang dilaksanakan oleh Bebras Indonesia dengan dukungan google.org untuk menebarkan dan mengajarkan penguasaan Computational Thinking kepada 2 juta siswa, melalui 22.000 guru berbagai mapel di 22 daerah di Indonesia.


Lisensi

Karya ini dilisensikan di bawah Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
CC BY-NC-SA 4.0
Hal ini berarti Anda bebas untuk menggunakan dan mendistribusikan karya ini, dengan ketentuan:

  • Attribution: Apabila Anda menggunakan materi-materi pada karya ini, Anda harus memberikan kredit dengan mencantumkan sumber dari materi yang Anda gunakan.
  • NonCommercial: Anda tidak boleh menggunakan karya ini untuk keperluan komersial, seperti menjual ulang karya ini.
  • ShareAlike: Apabila Anda mengubah atau membuat turunan dari materi-materi pada karya ini, Anda harus menyebarluaskan kontribusi Anda di bawah lisensi yang sama dengan karya asli.

Didukung Oleh

IA TOKI

Kementerian Pendidikan, Kebudayaan, Riset, dan Teknologi Republik Indonesia

Bebras Internasinal

Google.org

bebras-pandai's People

Contributors

1234iqbal avatar 12henbx avatar ahmad8taufiq avatar arvincs avatar atnanahidiw avatar dandiindrawijaya avatar gmochid avatar haqqer avatar muttaqinrizal avatar novaari2 avatar reorr avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bebras-pandai's Issues

[Task] Lihat Materi - Add flag/button in list item page that the file is available offline

Description

If a learning material has been downloaded before (hence, it is available offline), on the list page give an additional print button (right side) in its item as an indicator that it is available offline & to make the access easier to be printed anytime

Delivery

  • file that has been downloaded before & available offline has a print button in its item on the list page
  • when the print button is clicked it will directly trigger the print functionality

[Task] Quiz - Add Starting Page in the Quiz exercise

Description

image


UI/UX

A page before starting every exercise, functioning as / has content of:

  • Step by step & screenshot on how to do the exercise
  • Info about the number of tasks & duration based on challenge group (sikecil, siaga, etc)
  • A checkbox for consent (sudah membaca petunjuk, akan menjawab jujur, dkk)
    the Mulai button is disabled if the checkbox isn't agreed / enabled

Next development:

  • customizable page if we have a sponsor

I propose using an HTML viewer so we can update the page easily, but I still can't imagine the detail

Feature

The starting page can be used to inform the user that:

  • the timer is started after the user click Mulai
  • the exercise isn't saved until all tasks are answered or the time is up
  • the timer will be reset if the user clicks back or the app is closed, also the attempt will not be counted

Delivery

  • [ ]

[Task] Quiz - Read Quiz data from DB & record the registered participant

Desciption

Quiz data is located at:

  • Latihan Minggu Depan: link
  • Latihan Minggu Ini: link

Read them first when Daftar Latihan Bebras button is clicked

Then, depending on what the user chooses, send the registration data to firestore with data like
https://console.firebase.google.com/u/0/project/toki-bebras-proto/firestore/data/~2Fweekly_quiz_participation~2Fexample_registered

Last but not least:

  • make the newly registered quiz appear on the list page
  • pass the quiz data inside the item model to be referenced later on

Note: the example of data with attempts content would be something like this
https://console.firebase.google.com/u/0/project/toki-bebras-proto/firestore/data/~2Fweekly_quiz_participation~2Fexample_attempted

Delivery

  • Data recorded in weekly_quiz_participation correctly
  • Newly registered quiz appear on the list page

[Research] Flutterflow - Explore the possibility that pdfviewer can load pdf file from local storage

Description

Basically, this task is intended to explore the feasibility of accessing local file / storage in Flutterflow
But to be more specific & visible, the scope is focused on loading pdf from local storage

Flows

  • Minimal flow:
    several files in local storage -> loaded by pdfviewer dynamically
  • Near-complete flow:
    download pdf file using firebase -> saved to local storage -> loaded by pdfviewer dynamically

Deliveries:

  • P0, document of the exploration + reference
  • P1, better if we could find a hacky way to make the task a success
  • P100 (optional, plus point), some suggestions on how to use Flutterflow in the future

[Task] Ops - Hidden Admin menu to preview all of the Bebras Tasks

Description

For easier ops debugging capability, we need to create a preview page of the Quiz Exercise in the app

Delivery

  • add field "isAdmin": false in the registered_user when registering
  • add logic to check user's isAdmin in the setting page & display Lihat Bebras Task button if isAdmin == true
    don't forget to hide the button back when isAdmin == false
  • add a page of ListView with the item's title from doc.id
  • make an exercise preview page reusing the quiz exercise page, but the answer button is removed/disabled

[Task] Quiz - Enable download Quiz BebrasTask data & redirect flow to Quiz exercise

Description

After we have successfully registered for the quiz and gotten the weekly_quiz_participation ID, make local storage collections to save the following data with weekly_quiz_participation ID as the key:

  • weekly_quiz_participation: for reference & update the attempts data
  • weekly_quiz_configuration: a parsed running_weekly_quiz or next_weekly_quiz (based on what the user chooses) filtering the important config field only
  • weekly_quiz_task_set: a list object of task set (question) to be displayed in the quiz exercise

Note: several redundant data are intentional to make access easier

Data structure

weekly_quiz_participation
as is

weekly_quiz_configuration

<weekly_quiz_participation id> : {
    "title": ,
    "id": ,
    "created_at": ,
    "start_at": ,
    "end_at": ,
    "challenge_group": ,
    "max_attempts": ,
    "duration_minute": ,
    "sponsors": ,
}

value of max_attempts, duration_minute, sponsors is filtered based on challenge_group choosen

weekly_quiz_task_set
map<id, list<bebras_task>>

Discussion

How to store the data locally?

  • Menggunakan Local Storage

Struktur Data Local Storage

  • "running_weekly_quiz" -> berisi ID quiz yang aktif
  • "quiz_[ID Quiz Active]" -> berisi json quiz + json task_set -> ini dipisah 2 saja

Delivery

  • Parser json dari dan menuju Local Storage
  • Ambil data dari Firestore dan simpan di local storage

[Task] Notification - Customize Notification header

Description

The push notification header is still using the default flutter logo
Image
Edit it to use Bebras logo (also create the asset if it doesn't exist)

Delivery

  • Bebras logo in the notif header
  • bebras_pandai -> Bebras Pandai

[Task] Lihat Materi - Make page of material list for each group class using tab

Description

1 of the app's main feature is to fetch & view a PDF material offline

Replicate what we have created in the previous Flutterflow project
Image

But the difference is create a new logic to read the data directly from firestore (https://console.firebase.google.com/u/0/project/toki-bebras-proto/firestore/data/~2Fmaterials)

Categorize the listed item & the tab into: (using the challenge_group field)

  • Umum
  • siKecil
  • Siaga
  • Penggalang
  • Penegak

In case the network isn't stable, we should cache the downloaded metadata in memory

FYI

The page is opened by click Lihat Materi button in main page

When the list item is clicked, it will download the asset if it does not exist locally and then redirect to the preview page, which has a different presentation based on the file format

  • pdf -> P0 (#13)
  • ppt
  • mp4
  • mp3

Delivery

  • complete tabbed page (presentation, domain, data) for the list of Materi, which read from firestore

[Research] Notification - Research on how to enable push notification

Description

Push notification is essential to send a new information or to remind the user

Research on how we can enable it

Several leads are:

Questions:

  • do we need the user device id to send the push notification?
  • how we can get the user device id?
  • how do we record the user device id?

Delivery

  • Detailed report on how we can enable push notification cross-platform

[Task] Lihat Materi - Add print functionality

Description

Make print functionality in preview pdf page like the video below

WhatsApp.Video.2023-10-24.at.13.08.46.online-video-cutter.com.mp4

Delivery

  • search & research first the available library we can use to enable the functionality, then discuss it in this issue's comment

Ultimate

  • Working print functionality

[Task] Quiz - Integrate quiz exercise to read task set from local storage

Description

The current approach so that we can work in parallel is by reading the task data directly from DB first ๐Ÿ‘

But, the requirement is to make the exercise run without the internet. So after #25 is finished, redirect the logic to read the task data from local storage.

Delivery

  • read all quiz task data & configuration from local storage
  • if the task data do not exist, handle it first to read from DB based on the quiz configuration

[Task] Quiz - Make presentation of Quiz exercise

Decription

Refer to: https://docs.google.com/document/d/12RwnmWcVlFKhpYy6oAlfT4-44zQjrb_ysw6MMBzSQdE/edit#bookmark=id.g43vvru5mjww
Assuming we have BebrasTasks property, which is a JSON list like this:

[
  {  // task-1
    "title": ..,
    "id": ..,
    "source": ..,
    "description": ..,
    "question": ..
  },
  {  // task-2
    ..
  },
  ..
]

(The example of BebrasTask data can be found at question_bank)

We create a page like this
image

Task:

  • check https://pub.dev/packages/flutter_html
  • the UX is:
    • when Jawab button is clicked show the dialog containing the question
    • โŒ will close the dialog, so user can read the description again
    • โœ… will save the answer and display the next question
    • for current release, no need to support prev/next question

Delivery

  • please make the mocked data for example by yourself (2,3 tasks copased from question_bank)
  • make the order, in which the task is displayed, shuffled
  • make the presentation as described

[Task] Quiz - Add SHORT_ANSWER input

Description

image

Right now, the Quiz Exercise can display MULTIPLE_CHOICE task only. Update the code so it can display the SHORT_ANSWER task also.
The update should include [see #Delivery]

Delivery

SHORT_ANSWER

  • fix answer object to not require options field -> if not, it will throw null error in SHORT_ANSWER
  • post-process the input in SHORT_ANSWER with trim whitespace (left & right) & lowercase

All

  • check logic of the task type
  • both SHORT_ANSWER & MULTIPLE_CHOICE shown correctly

[Task] UI/UX - Redesign App UI to make it more kids friendly

Description

@12henbx proposing to redesign the app to make it more like a kids app

He gives an example like this
Image
https://dribbble.com/shots/9189033-Child-education/attachments/1232166?mode=media

But making it a blue color
Image

Here are the overall pages that need to be redesigned
image

also need these pages not covered in the illustration:

  • Splash screen
  • Introduction page before the Quiz start
    T&C before starting the exercise -> "Saya telah membaca peraturan & akan mengerjakan dengan jujur"

References

Delivery

  • Figma file of redesigned all pages

[Task] Quiz - Make final score page + submit result to DB

Description

Make a presentation of the final score page like this

Image

Apply a different logic that

  if n_answer_correct >= (n_answer_incorrect + n_answer_blank):
     // display message MANTAP!!!
  else:
    // display message Coba lagi! Jangan Menyerah! 

Need to adjust the font size for the different messages ๐Ÿ™

Also, need to update the DB data

Delivery

[Task] User Management - Make Personal Info Form

Description

Make form page when user first time login to be filled with their personal info

Flow

  • User login using Google Account
  • If user is new, then it will be redirected first to fill the personal info
  • In the firestore, other than personal info, we should also store & update the Quiz participation record

UI / UX

Image

  • User data: link
  • In โ€œEdit Profilโ€ menu, the view is the same with when user fills their info at the first time but change the button to โ€œPerbaruiโ€
  • Logout should check if there is an internet connection first (if no internet then logout is failed)
    • Because we want to update the latest user data into server before they can logouted successfully
  • List of Bebras Biro: link

Delivery

  • Form page when user hasn't registered
  • Working "Edit Profil" feature

[Task] User Management - Use display name from user registered input

Description

User has inputted their name when registering, but we still use the display name from FirebaseService
To make the data relevant, change all FirebaseService.auth().currentUser?.displayName with our implementation

Delivery

  • code for user service
  • updated displayName

[Task] Lihat Materi - Make preview page with pdf

Description

Make display pdf page
image

code in flutterflow as a reference
https://github.com/ia-toki/bebras-pandai/blob/flutterflow/lib/pages/preview/view_pembahasan_soal/view_pembahasan_soal_widget.dart

Additional info

if you check the firestore DB (https://console.firebase.google.com/u/0/project/toki-bebras-proto/firestore/data/~2Flearning_material), you will see the data is structured like this

{
    "title": "Buku Bebras 2016 - Penegak",
    "description": "Buku Bebras 2016 untuk kategori Penegak",
    "challenge_group": "penegak",
    "url": null,
    "staging_url": "https://firebasestorage.googleapis.com/v0/b/toki-bebras-proto.appspot.com/o/buku_bebras%2FBebras-Challenge-2016_Penegak.pdf",
    "source_urls": [],
    "file_format": "pdf",
    "is_printable": true
}

the explanation is:

  • title: title to be displayed
  • description: description as more info, can be displayed as subheader or tooltip
  • challenge_group: group for tab filter
  • url: firebase storage URL in production
  • staging_url: firebase storage URL in staging
  • source_urls: public URLs where we can get the file for metadata (not for app)
  • file_format: file format
  • is_printable: flag whether the item is printable (not important for now)

some key points are:

  • url & staging_url must be inside firebase storage, so we can have a URL that within our system
  • we use different fields, url & staging_url, so we can edit easily & not make breaks after the app is released in the future

Delivery:

  • Fully functional page to view PDF materials offline

[Task] Quiz - Disable register button if user has been registered before

Description

To avoid duplicate data, when a user has registered for the related quiz before, we have to disable the choose weekly button (Latihan Minggu Depan or Latihan Minggu Ini)
Check it by get the user's uid & quiz's id in the weekly_quiz_participation, if the data exists -> disable the button

Delivery

  • working disabled button if data user found in weekly_quiz_participation

[Task] Quiz - Full functionality of Quiz exercise preview

Description

Continuing #18, make the quiz exercise fully functional & already read from firestore

Complete it with other components like repository, model, etc

Please save every input & compare it with the correct_answers:

  • for SHORT_ANSWER, trim the left & right whitespace first
  • for now, the method of comparison is by using .contains since it's possible to have >1 possible correct answers

Delivery

  • read BebrasTask from firestore
  • save every input answers
  • save also the comparison verdict -> {"verdict": "CORRECT"/"INCORRECT"/"BLANK"}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.