Giter VIP home page Giter VIP logo

omm's Introduction

Hi 👋

fn main() {
    let me = SoftwareEngineer {
        name: "Andreas Ellwanger",
        role: "Software Engineer",
        company: "Celonis",
        languages: Vec::from(["de_DE", "en_US"])
    };
    me.say_hi();
}

#[allow(dead_code)]
struct SoftwareEngineer<'a> {
    name: &'a str,
    role: &'a str,
    company: &'a str,
    languages: Vec<&'a str>
}

impl SoftwareEngineer<'_> {
    fn say_hi(&self) {
        println!("Thanks for dropping by, hope you find some of my work interesting. ~{}", self.name);
    }
}

omm's People

Contributors

c3pobstler avatar dependabot[bot] avatar griase94 avatar maxrawlinger avatar ndrsllwngr avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

maxrawlinger

omm's Issues

Template/ Canvas is not clearing

Canvas clearing button does not really clear the canvas.
As you enter your mouse after clearing, the old state of the canvas is loaded again

All about templates

  • always write template into meme collection, if template is not yet existing, create one. not doing, but should be implemented
  • _id, fullUrl, firestorePath (optional), createdBy, createdAt, fileFormat (png, gif, video), source (userUpload/external)
  • adapt template filter on to use template collection
  • adapt template charts

TODOs Andy

TODO
  • add option to generate meme in backend (get the complete json)
  • add option to start project within a docker image
  • create documentation regarding setup of firebase and mongodb
  • fill out the excel sheet with points and add additional points
  • add custom screenshot api to backend with puppeteer
DONE
  • add fabric js to backend
  • comment (add custom resolver, add comment selection, add comment count)
  • fix all api routes
  • user bound kommentar funktion bei memes
  • insert user data on registration
  • add point count (aka difference between up and down votes, see getTotalPoints)
  • meme view count hochzählen (cheating verhindern)
  • das system bzgl. public/unlisted/private memes umsetzen (feld wird bereits bei creation gesetzt) #100
  • bei den votes die anzahl von votes anzeigen #78 #80
  • evtl. onSnapshot usw bei useVoting wegnehmen, da die Memes sowieso mit einem onSnapshot angezeigt werden, und somit useVoting nur mit writes umsetzen ohne reads, würde somit db usage um N verringern #78 #80

Create a single image with bottom/top text

A structured API should give access to some of the sites’ functionality without requiring a graphical interface. The API should provide image creation and image retrieval.

#14, #15 see for more information 🔺

Get any previously created image

A structured API should give access to some of the sites’ functionality without requiring a graphical interface. The API should provide image creation and image retrieval.

#14, #15 see for more information 🔺

Template & Meme data model

TEMPLATES

{
    "title": "This is fine meme",
    "createdAt": "1609268374",
    "createdBy": "USER_ID_X",
    "upVotes": ["USER_ID_1",  "USER_ID_2"],
    "downVotes": [],
    "type": "STORAGE | EXTERNAL",
    "img": "STORAGE_PATH_TO_IMG",
    "url": "DOWNLOAD_URL_FROM_STORAGE | URL_TO_EXTERNAL_IMG",
    "width": 1024,
    "height": 768
}
  • "img": "STORAGE_PATH_TO_IMG" is only necessary for type STORAGE 💡
FUTURE ADDITIONS
+   "usageCount": 2, (number of memes using this template)

MEMES

meme: PropTypes.shape({
    title: PropTypes.string.isRequired,
    createdAt: PropTypes.any.isRequired,
    createdBy: PropTypes.string.isRequired,
    upVotes: PropTypes.arrayOf(PropTypes.string).isRequired,
    downVotes: PropTypes.arrayOf(PropTypes.string).isRequired,
    forkedBy: PropTypes.arrayOf(PropTypes.string),
    forkedFrom: PropTypes.any,
    views: PropTypes.number.isRequired,
    template: PropTypes.shape({
      id: PropTypes.any,
      url: PropTypes.string,
    }).isRequired,
    url: PropTypes.string, // if a real png was created (requirement)
    svg: PropTypes.string.isRequired,
    json: PropTypes.shape({
      background: PropTypes.string,
      height: PropTypes.number,
      width: PropTypes.number,
      preserveObjectStacking: PropTypes.bool,
      version: PropTypes.string,
      objects: PropTypes.arrayOf(PropTypes.any),
    }).isRequired,
  }),

Disable CORS origin verifcation for public API endpoints

PROBLEM
  • GET - http://localhost:3000/api/meme/10 is working locally, but not online https://omm.vercel.app/api/meme/10
  • default is set to same-origin, which most probably is causing this
  • since our application (and local env) is same-origin it is working fine (e.g. https://omm.vercel.app/meme/10)
TASK
  • disable CORS for API requests (corsOptions = { origin: false }) which need to be public
NOTES

Adjust API to fit final datamodel

Refactor API to fit the final datamodel (blocked until this is defined).

Also add route where a .zip can be provided for creating multiple memes.

TODOs Max

  • Search
  • Template Filter with Dropdown and Images
  • Download

UX Page-Structure

Feed-Frontpage with recent memes of other users.

Meme-Generator as a feature of the Page.
Possibilities to create memes from within other users generated memes as well as through the meme-generator.

Frontend/UI

Bildschirmfoto 2021-02-08 um 18 07 24 (2)

Comments are reaching out of the scrollable viewport on the bottom of the page

Update README and make project ready for submission

  • Please be aware of copyright or legal issues (for publicly reachable webpages), especially if anyone can upload images. Further, data privacy and GDPR compliance should be considered (it is not required, but you should mention it) as the use of web services is easier and scalable but one does give up control over the websites data to various degrees.

  • For all used technologies, it still holds (as described in the project description), that you have to specify the license and function of the integrated library/function. E.g. if you use the user management in firebase you need to explain in the code/comments what happens internally (how/where (e.g. country) does firebase store data (data privacy!), what are my options to create/retrieve users, etc.). This does not need to be a two page in-depth analysis, but you should understand what you are using and inform yourself about it.

  • For the hand-in we require a “reproducible” and a “live” version. In case of a local server, container or similar both are fulfilled by the submission being executable. In case we cannot just locally execute your server and access the webpage, please provide a link to a live version to try the website out. This can also be a local webpage with an online server as backend.
    provide .env.local with credentials

  • Please provide a readme file and sufficient instructions to run the webpage/server and or recreate all no local parts. This also means, that all necessary code has to be submitted. If code is normally not in a file structure (e.g. web interface of a web service) you have to submit the code as text files. The readme could look like: “Register for MongoDB Atlas, create a database name “XX”, import file “dump.json”, adjust login credentials in file “dblogin.js”. Run this in node.js, open http://localhost:3000/” Or “register to firebase, create new app, create server less task with condition X and copy code from file XY.txt

  • All information for us to be are able to “copy” everything to a new server/account without previous knowledge has to be included.

  • If not all your features are reachable from the index page, please also include either an overview page or list features in the readme (e.g. open http://localhost:3000/ for webpage and use http://localhost:3000/api for the API requests). However, an overview page (as part of your website) with an example API call and links to the individual pages is preferred for faster evaluation.

TODO

  • refactor code
  • comment code
  • test run project
  • add option to start project within a docker image
  • create documentation regarding setup of firebase and mongodb
  • fill out the excel sheet with points and add additional points

FINAL SUBMISSION

  • soruce code
  • readme (step by step how to set up)
  • env files
  • add online service document (google)
  • link to hosted live version
  • docker container hochladen und link mitgeben
  • feature list (excel sheet)
  • add to readme easy instructions
  • add liscense of all depdencies list
  • postman collection im readme referenzieren (für API)
  • sitemap of all pages and routes (take output of next build)

Search Refactor

When typing anything in the search field and afterwards erasing the query, the whole collection gets queried.
Maybe the custom resolver can handle this issue by sending an empty array when the query string ist empty

Emergencylist

Access to image at 'https://firebasestorage.googleapis.com/v0/b/online-multimedia.appspot.com/o/templates%2F603becd86c567db9e655596a?alt=media&token=35387e02-232f-40c9-b486-b7ccfa2975b3' from origin 'https://omm-git-feature-generate-serverside-ndrsllwngr.vercel.app' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

TODOs Andreas E.

BACKLOG

  • mitigate duplicate templates (from e.g. imgflip api)
  • loading skeleton https://material-ui.com/components/skeleton/
  • allow user to choose canvas color (default, transparent)
  • meme/id wont load if only 1 meme collection size equals 1
  • add option to set txt background
  • add proper shadows to text
  • title input mandatory for templates
  • include gifs as possible templates (static caption) not doing

TODO

  • add option to navigate through pages on overview page (e.g. endless scroll or pagination)
  • add option to generate memes server-side (just send all data to route, insert into db on backend)
  • download meme
    • add option to choose generated file size of download (before generation), sync with @griase94
    • add option to generate png output
    • add download buttons (client/server)
    • use route of andy with api to download meme (with query param)
  • add forkedBy entry to meme when it forks a meme
  • include videos as possible templates (static caption)
  • write automated tests
  • refactor code
  • comment code
  • check readme
  • check docker image
  • fill out task list (excel sheet) and add additional points
  • upload latest git repo/excel sheet, readme, instructions, docker image (link to zip file)

DONE

  • add captions to root key/val of meme & and add them to text to speech
  • enable filter by template on /meme/id page
  • add charts to meme page (as modal) similar to template details
  • move template input modals to meme generator
  • add text to speech to meme/id page
  • add speech to text to meme generator (input caption / title)
  • fix charts of template details
  • add charts to templates (as modal)
  • evaluate template value in meme collection, and necessary template content in template collection
  • inject title, too when copying meme and opening a draft
  • add option to change visibility level to public/unlisted
  • remove draft collection
  • allow for dictating captions
  • after creating a template and navigating to meme/create a hard reload is triggered
  • Fix autoplay
  • Implement UI for comments
  • fix template webcam bug, if permission is missing (video.srcObject)
  • Load fonts via font-loader to support e.g. mobile 💔 use default google font imports instead
  • add option resize canvas
  • reset filter on meme generate :)
  • add share buttons
  • Update proptypes (meme)
  • Fix bug to using a meme of imgflip api in meme generator I am unable to reproduce this issue. 💔
  • title in load meme state
  • fix loading state in /index
  • update env vars on vercel

Document stack

  • react
  • next.js (incl cloud functions /api folder)
  • tailwindcss
  • firebase storage
  • mongodb incl. realm (graphql)
  • storybook
  • fabric.js

Local firebase alternatives - object and file storage

  • https://parseplatform.org/

    Parse is a Backend-as-a-Service (BaaS) framework, acquired by Facebook in 2013 and then open-sourced in 2016. Since then, Parse has grown to become the most well-known of its kind, with a huge community and an impressive number of users to back it up.
    In comparison to Firebase, Parse stands its ground really well. It might not have Firebase's fancy machine learning or analytic capabilities but aside from that, it's very much a complete package. User authentication (including Single Sign-On with multiple providers), realtime database, file storage, hosting, push notifications and even cloud functions are present. Plus, you've got tons of both official and 3rd-party plugins, adapters, and integrations that push the framework even further.
    The only field where Parse falls behind might be the ease-of-use. However, like with most self-hosted platform, it's somewhat expected. With that said, all the client-side SDKs and libraries (there's a ton of those covering a vast range of different platforms) do rival Firebase in terms of simplicity and ease-of-use. And even on the server-side, there's a dedicated Parse Dashboard that you can use to manage your Parse Server from the comfort of its graphical UI.
    So, after you get Parse Server up and running - trust me - it'll only get easier from there.

  • https://appwrite.io/

    Although it's the youngest of the bunch, Appwrite seems like the most direct open-source alternative to Firebase. From the Docker-only setup, through database, file storage, and user authentication functionalities, to full-blown, Firebase-like dashboard, Appwrite provides you with that lovely all-in-one experience.
    However, because Appwrite is a fairly young project, there are still a few things missing. There's no realtime functionalities (at least built-in) or anything like cloud functions or website hosting. However, everything that is present is very much polished with friendly API to go along with it.
    The client-side SDK is currently limited only to JavaScript, although there's beta support for Flutter - meaning iOS, Android, and potential all the other platforms that Flutter does or will support in the future.
    Overall, Appwrite really seems like a well-rounded, easy to use solution. And as it approaches v1, we can expect it'll only get better!

Nice-to-have

UX/UI

  • Loadingstate/icon (Like nian cat flying throw viewport)

Meme Generator:

  • Predefined Image filter on Meme creation (Like Instagram)
  • Keyboard interaction while meme creation -> means goback and clear with backspace and enter and copy-paste font-box
  • When choosing colour while meme creation no coloured overlay behind the focused text
  • Text background.

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.