✨ This workspace has been generated by Nx, Smart Monorepos · Fast CI. ✨
Enhance your Nx experience by installing Nx Console for your favorite editor. Nx Console provides an interactive UI to view your projects, run tasks, generate code, and more! Available for VSCode, IntelliJ and comes with a LSP for Vim users.
Add Nx plugins to leverage their code generators and automated, inferred tasks.
# Add plugin
npx nx add @nx/react
# Use code generator
npx nx generate @nx/react:app demo
# Run development server
npx nx serve demo
# View project details
npx nx show project demo --web
Run npx nx list
to get a list of available plugins and whether they have generators. Then run npx nx list <plugin-name>
to see what generators are available.
Learn more about code generators and inferred tasks in the docs.
To execute tasks with Nx use the following syntax:
npx nx <target> <project> <...options>
You can also run multiple targets:
npx nx run-many -t <target1> <target2>
..or add -p
to filter specific projects
npx nx run-many -t <target1> <target2> -p <proj1> <proj2>
Targets can be defined in the package.json
or projects.json
. Learn more in the docs.
Nx comes with local caching already built-in (check your nx.json
). On CI you might want to go a step further.
Run npx nx graph
to show the graph of the workspace.
It will show tasks that you can run with Nx.
-
Solidity: Χρησιμοποιήσαμε Solidity για το smart contract λόγω της ευκολίας στη χρήση, του καλού documentation, και της ταχύτητας ανάπτυξης και υλοποίησης που απαιτήθηκε στον διαγωνισμό, καθώς υπήρχε οικειότητα.
-
Infura: Παρέχει RPC nodes και λειτουργεί ως γέφυρα μεταξύ Web2 και Web3 για την ανάπτυξη dApps και hybrid apps, όπως στη δική μας περίπτωση.
- Express: Ελαφρύ και απλό backend library για Node.js.
- Mongoose: ODM για τη βάση δεδομένων MongoDB. Προτιμήθηκε λόγω της απλότητας στις σχέσεις μεταξύ οντοτήτων, της απόδοσης, της ευκολίας χρήσης, και της δυνατότητας κλιμάκωσης.
- RabbitMQ: Χρησιμοποιήθηκε για ενδο-υπηρεσιακή επικοινωνία, παρέχοντας μεγάλη ευελιξία στον χειρισμό μηνυμάτων, επιβεβαίωση παραλαβής, ανάγνωσης κ.λπ.
- Next.js: Για υψηλές επιδόσεις και SEO scores, υποστηρίζοντας SSG, SSR, και SPA.
- Tailwind CSS: Για ευέλικτη και γρήγορη ανάπτυξη UI.
- shadcn/ui: Χρησιμοποιήθηκε για τη δημιουργία βασικών components.
- NX: Monorepo manager για TypeScript/JavaScript. Παρέχει generators για Express, Next, e2e testing, unit testing.
- GitHub: Για Version Control System (VCS).
- v0: Χρησιμοποιήθηκε για την παραγωγή pure components και mockups του front-end, διευκολύνοντας την παρουσίαση και την οπτικοποίηση του τελικού προϊόντος.
- ChatGPT: Χρησιμοποιήθηκε ως εργαλείο brainstorming, γρήγορης έρευνας, και παροχής παραδειγμάτων για libraries.
- Co-pilot: Εργαλείο για επαναλαμβανόμενες εργασίες και αύξηση της παραγωγικότητας.
- webpack: Χρησιμοποιήθηκε για το bundling της TypeScript.
- simple-git: Ελαφρύ API για προγραμματιστική χρήση του GIT, επιτρέποντας τη δημιουργία "Git-as-a-service" software.
- Ethers.js: Πλήρες library για το Ethereum σε TypeScript. Χρησιμοποιήθηκε για την αλληλεπίδραση με το smart contract μέσω του Infura.
- JMeter: Για load testing.
- jUnit: Για unit testing.
- Cypress: Για end-to-end testing, με boilerplate generators από το NX.
- GitHub Actions: Για τη δημιουργία CI/CD pipelines.
- Google Cloud: Χρησιμοποιήθηκε για deployment μέσω του Google Kubernetes Engine και virtual storage για CDN. Γνωρίζουμε και τα αντίστοιχα από DigitalOcean.
- Kubernetes & Docker: Για deployment του backend. Τα containerized microservices μπορούν να κλιμακωθούν ανάλογα με το traffic.
- Vercel: Για deployment του front-end. Παρέχει analytics (π.χ. A/B testing) και ενσωματώνεται με NX + GitHub.
- Cloudflare: Για DNS management, attack mitigation, caching, optimization, και analytics.
- Sentry.io: Για microservice tracing και observability (βασισμένο στο OpenTelemetry).
- Ngrok: Για HTTP tunneling, επιτρέποντας incoming HTTP/websocket traffic στο localhost development environment.
- i18n: Για μεταφράσεις του UI.
- Zod: Για Data Transfer Object validation.
- JWT: Για stateless authorization.
- RxJS: Για async stream pipelines, όπως message processing.
- Socket.io: Για real-time επικοινωνία server-to-client (π.χ. για notifications).
- Redis: Για γρήγορο in-memory caching (cache aside, function memoization).
- Swagger: Για τεχνική τεκμηρίωση (βασισμένο στο OpenAPI, με Zod integration).
Οι παραπάνω τεχνολογίες (εκτός από το simple-git
, το οποίο είναι business logic specific) μας επιτρέπουν να υλοποιήσουμε οποιαδήποτε κλασική Web2 εφαρμογή ή hybrid εφαρμογή με Web3 integrations.