2

I'm going to develop a web application that let clients to upload files and show them as a Facebook wall. You'll be able to see a chronology of all the uploaded files, so it's going to be similar to Facebook web application, but you'll have private wall for your files.

There will not be relationships between clients, a client will just have access to his wall and his files.

That web application must follow these requirements:

  1. Built-in security. There must be HTTPS and SSL for protect all users files and privacy.
  2. Responsive design. A client must be able to login using a smartphone or a desktop browser.

The user would be able to upload any kind of file, such as images, video, sounds, pdf, and must have the option to reproduce (at least video and image) the files on the browser.

The main features of the web application are the following:

  1. Capable of uploading any kind of file.
  2. Possibility to sync across multiple platforms (for example, upload images from Facebook).
  3. Store passwords in strong security.

The main question is the following: What frameworks should I use to accomplish that application?

I've been thinking with multiple options, and I'll be terrible happy if someone could tell with what I should start.

  • Front-end: AngularJs or EmberJS.
  • Back-end: Django or Rails or Meteor or NodeJS.
  • CSS: Bootstrap or Foundation or SemanticUI or UIKit.

Database is going to be PostgreSQL since I can't find any advantage on using noSQL database (such as mongoDB).


I've put the most used frameworks as front-end and back-end (at least I think that these are). If you use another framework you can recommend it too.

What frameworks do you recommend?

  • Well trodden software stacks are all good, be cautious of anything more eclectic. I like MEAN (Mongo, Express, Angular, Node) because it's JavaScript all the way down! I'm not going to develop that into an answer as you've already ruled out NoSQL... and to be honest in any other stack I probably would too. – Antony Jun 14 '17 at 10:13
2

Stack

If you are interested in a web application stack outside the Java ecosystem I would suggest a modified LAMP or LAPP stack. The abbreviation stands for

  1. LInux operating system
  2. Apache web server
  3. MySQL or PostgreSQL
  4. PHP

Frameworks

To compliment your. LAMP stack I would add the following frameworks

  1. Laravel 5 as your back end MVC framework for PHP
  2. AngularJS as your front end MVC framework for JavaScript
  3. Angular Material as your CSS UI library for a beautiful and responsive interface that fits perfectly with your other technologies.

Justification

You listed many requirements in your original post and in the comment section thereafter. I will briefly explain why I believe my recommendations fit your requirements.

Security

Apache web servers are highly configurable and the amount of information regarding secure configuration for Apache is unrivalled. You will readily find up to date information on configuring your servers ciphers. Apache allows you to decide if you want to accept only the strongest encryptions, configure your SSL with both speed and strength in mind, or even differentiate encryption strength by URL.

Additionally Apache offers some great modules and directives for authentication and authorization. Global configuration can be defined in the main config file however Apache also offers per directory control over acess and authentication in the form of htaccess and htpasswd files.

Linux allows for great visibility into privileges and user account management. Linux is not infaliable but the ability to easily assign and change ownership (user and group) of your server greatly increases the security of that server. Additionally the Linux terminal allows for intelligent scripting and offers a wide range of intrusion detection and protection systems to pick from.

The Laravel framework offers some key security features too. With Laravel you also get authentication and authorization functionality as well as protection against SQL injections, XXS, and CSRF attacks. In addition you also get form validation, encryption capability and password storage and retrieval capabilities.

Responsiveness

One of the best things about using Laravel is that it meshes very well with an Angular front end. With angular you have the ability to use angular Material which provides beautifully styled DOM components. Angular Material is mobile friendly and responsive. Additionally the material design looks great on all contemporary mobile devices and has the illusion of being native on most Android devices.

Education

I do not know what you skill level is as a developer or what you do for a living. However my experience working on side projects with a very similar stack helped me tremendously on my programming career and set me apart from my peers as a junior developer. This stack will teach you some very important skills including using Linux commands, MVC design patterns, basics of web application security, intermediate JS and CSS

  • That's an incredible stack for sure. Instead of material design what about semantic UI? I've only readed incredible thinks about this css framework. By the other side, most people say that PHP is and old language (most of them don't considere php as a programming language). What about your configuration but changing material design for sematic UI and laravel with some more newest backend: meteor, expressJS, django, ruby on rails? Big thanks anyaway!! – Lechucico Jun 10 '17 at 10:31
2

Vaadin

The Vaadin Framework is an advanced tool to write in pure Java a server-side web app that is automatically rendered client-side in common web browsers using web-standards technology. So you needn't know HTTP, HTML, CSS, DOM, JavaScript, AJAX, WebSocket, and Push as Vaadin handles all that for you.

Because your app runs server-side while merely rendering the UI on the client, you can securely connect to your Postgres database server via JDBC.

You can run your Vaadin app in any Java Servlet container such as Apache Tomcat or Eclipse Jetty. Actually, Vaadin comes with an embedded copy of Jetty for you to use immediately in development but you can deploy to any Servlet container.

Securely connecting the Web browser is not really a development framework issue. You need to obtain a security certificate from a vendor such as LetsEncrypt.org and deploy to your web server (such as Tomcat or Jetty mentioned above) and configure to activate TLS encrypted connections. TLS is the replacement for obsolete SSL. You can deal with this near the end of your development effort.

Vaadin includes an upload component. See the live demo.

You can build a responsive design in Vaadin. You may need to do some work tweaking CSS which is not otherwise required for desktop-oriented Vaadin apps. So learn the basics of Vaadin before attempting the responsive design. See blog article. See live demo. Note that the mentioned TouchKit product is no longer needed as the Vaadin Framework has become quite mobile/touch savvy.

Vaadin is open-source and free-of-cost. Growing rapidly in popularity with over 150,000 active developers worldwide.

  • I'll take a look! I already know java, I was thinking with something not related to it, for learning something new, but thanks! – Lechucico Jun 9 '17 at 7:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.