Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Abisite

This is a small side project we created to easily manage surveys for our A-level magazine. Some members of our team wanted to give sheets to all 120 students to answer the questions, but I was not quite interested in reading through about 1000 answers...

Since I started this project, my team decided that I should also implement some other features. This website is now able to:

  • Collect surveys in the most elegant way possible
  • Ensure the authenticity of votes using a registration system
  • Collect funny or interesting quotes told by teachers and/or other students
  • Collect profiles of students, including a variable number of pictures
  • Redirect the user to a third party website for even more image collection

Using the project

Using docker

The easiest way to run this project is to use the docker-compose.yml file located in this repository. It provides you the latest stable version of this project as well as a postgres database that this project relies on. In order to run the project, you will also have to set a few environment variables, which are explained later in this document. The easiest way is to just download or copy the example abisite.env file in this repository. After you downloaded both files, adjust the environment variables and the docker-compose.yml file to your needs and make sure you have Docker installed. You can then run the compose project with

docker compose up -d

Running the project without docker

If you want to contribute to this project or just run the project locally, you can also run it via Vite. You will have to clone the repository and cd into the newly created directory

git clone https://github.com/LoCrealloc/abisurvey
cd abisurvey

After that, you will have to install the project dependencies. Make sure you have Node and NPM installed.

npm install

After successfully installing the dependencies, copy the abisite.env file and adjust the copied file to your needs. You need to have a running Postgres instance in order to use the survey website.

cp abisite.env .env
vim .env

Once you have your database running and adjusted the environment file, you can run the website in a development environment using

npm run dev

Environment variables

VariableExplanationExample
DB_HOSTThe IP address or hostname where the app can find the postgres databaselocalhost
DB_PORTThe port the database is listening on5432
DB_USERThe database userabisurvey
DB_PASSWORDThe password for the database userabisurvey
DB_NAMEThe name of the database to be used for the apps dataabisurvey
SECRETThe secret used for signing the session cookies. Should be a long, randomly generated string
DEFAULT_ADMIN_PASSWORDThe default admin passwordadmin
FILE_SIZE_LIMITThe maximum size for user image uploads in bytes2000000000
PUBLIC_IMAGE_UPLOAD_LINKA link pointing to a website where a user can upload different pictures, for example a nextcloud instancehttps://upload.example.com
APP_PORTThe port the project is running on3000
APP_HOSTThe host on that the app is listening on for new connections0.0.0.0
APP_ORIGINThe full public url where the app is called onhttps://example.com
APP_PROTOCOL_HEADERHeader that tells Sveltekit the protocol it was called withx-forwarded-proto
APP_HOST_HEADERHeader taht tells Sveltekit the host it was called onx-forwarded-host

Bug reporting

If you encounter any problems or bugs with this project, please create an issue for this repository on Github. I will try to help you as soon as possible.

License

This project is licensed under the terms of the GNU General Public License v3.0 license. You can find a copy of this license in the LICENSE file.

About

A simple survey manager for your yearbook or Abizeitung

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages