I want to bring to your attention a free service that should be useful to everyone who deals with freelancers.
Meet -
GreentaskIn short, it is a tool for creating and managing tasks with advanced functions. A small spoiler - a service written in Go.
About service
This service has many uses, but for the beginning we will draw an analogy.
Surely everyone knows the services of the rapid exchange of screenshots such as Joxi. Another analogy is a variety of pastebin'y for quick exchange of pieces of code. Greentask can act as a quick job exchange service, but with much more advanced features, which are described below.

History of creation
Initially, I wanted to make a very simple service so that it would not take a long time, as it often happens. In the process of work, new ideas appeared, and some of them could not be abandoned. As a result, a list of functions was developed, and it was firmly decided not to succumb to the temptation to add something else. Everything else - in backlog.
I have experience with remote employees and freelancers, and each time when searching and working the same problems arise:
')
- Communication channel
- Job delivery
- Job structure
- Change job in the process
Below we analyze each of these problems separately. But in order for a new project to be born to realize these problems is not enough, it is necessary that other conditions arise. And they have developed. I started developing a prototype and backend in the summer of the 15th year, when there was enough free money and time for this, as well as a burning desire to try out this idea on the basis of a new technology for me. By this time, I had long been eyeing the Go programming language, and now when I had the idea of ​​a new project in my head, there was no reason not to start development. As you know, the best way to learn a new programming language is to write something real and more complicated on it than “Hello world!”. Resolved - done. He worked mainly on weekends, he could have done much less time on full time, but there was no such task. Below I will tell you more about my impressions when working with Go and what advantages it has given in this project.
Problems
Let's analyze the above problems in more detail, as well as the approaches that Greentask uses to solve them.
Communication channel
Imagine that you have a task, but no performer. You publish an ad on several free-lance exchanges, and are waiting for a response. Stop. And where are you waiting for an answer? As a rule, on several channels. Someone will write through the private messages of the exchange itself, someone by mail, someone on skype, someone even on icq. But you don’t have ICQ for many years now. It's good that there is skype, but there are a lot of contacts left without it since the publication of the last task. The result is spaghetti from different channels. Familiar?
Greentask proposes to bring all communication into the task itself. All you need to do on the freelance exchange - leave a link to the task in place of the text of the task itself. Reference type: greentask.in/your_task_hash. For particularly stubborn, you can leave the text under the link: “Write suggestions and questions strictly on the task page”. After all, the browser that is, for everyone.
Job delivery
In case you use skype or other messengers, the first one that the candidate asks is: “Tell the task in more detail”, and then options are possible. You can copy a task to everyone, or somehow transfer the “Word” file that needs to be opened locally. Then all the same there will be questions that will refer to different sections of the task, and you will have to jump back and forth to find the right item and then answer in skype.
Greentask solves the problem of transferring a completed task simply by opening the link in the browser, you do not need to download anything, and questions for each item of the task can be asked directly under it. Each online task visitor is marked with a circle at the top right, so you can estimate the number of people studying your task.
Job structure
As you know, a correctly formulated and executed task has already been completed by 50%. Greentask helps you to build the structure of the job, understandable to the performer. For this, the performers themselves will thank you. And if you're a freelancer, then it makes sense to recommend greentask to your customers, for mutual simplification of work. It is important to note here that the fact that the service itself does not exclude the possibility of writing a TK for something, and is not an exclusive tool for this, but it helps to make fewer mistakes, that's all. Although this is not enough.
Change job in the process
It often happens that after the executor’s familiarization with the task, a change in the TOR is required. And it would be good if he found out about it. And even better, to see what has changed. For this, in general, you will have to report separately about this. And this is not convenient, but if there are several performers (candidates), then it is even more inconvenient.
Greentask will send notifications of all changes to all participants, with a link to the page where the visual comparison of the version of the task is implemented: the version that the executor saw the last time and the latest version of the task. This will save unnecessary questions such as “What has changed since that time?”
Why is the service free?
Initially, I saw this service free for everyone, and it’s also a kind of experimental project. In the future, the project promises to remain free for all.
Chrome extension
Especially for greentask developed Chrome extension for ease of access to jobs, as well as the rapid receipt of information about changes in the tasks. The functionality is very simple and, I hope, clear.
mobile version

The site is optimized for viewing in mobile devices, and multiple elements from Material create an almost native look and feel =)
Little about go
About Go has already been written enough, so I will tell only what advantages the language has given in this project, without spreading out philosophical thoughts. Just to say that Go, in my opinion, is a language for practitioners who want to quickly implement reliable functionality, and for which it does not matter whether there are generics or garbage collection. These people write programs that just work.
Static Binary
I myself am a backend and love and know the front-end a little more than nothing. Although I have enough provision, about how best to adjust the backend under the front. So I had to look for an artist. And how can the performer raise the backend locally? In the case of Go, there are 2 commands: running migrations to create tables in sqlite, and actually launching a web server. Everything. In addition, there is no need to transfer the source as in the case of python / ruby ​​/ php / ... About the deploy and say nothing, it's really simple.
Distribution of statics and the absence of Nginx
In greentask, you can download attachments to the items of the task, and the task can be private, that is, inaccessible publicly. In this case, the investment should not be publicly available either. In the case of the usual scheme of distributing statics via Nginx, one would have to resort to various non-trivial ways to configure Nginx to control access rights to statics. In greentask, this logic is inside the application.
Nginx or another web server is not used at all. Compression and ssl termination occur in the application.
Asynchronous tasks
Not all tasks are executed instantly, so it’s advisable to run them asynchronously. In django, this would require celery or an analog, that is, a separate process. In go, everything works in a single process and is run in code through the go operator. Very simple and beautiful. I use for asynchronous sending mail.
Web sockets
Due to the presence of built-in mechanisms for asynchronous work and ready-made libraries, the implementation of web sockets is not a big deal. In greentask, I use them to display online users and procedures for updating data on the page when changing. Therefore, the open task page always displays actual data without reloading, be it a comment, a change in the text, or an attachment download by the performer. As a bonus, you will not receive a notification email about a new comment and a task change if you are online, because you will see it anyway.
Scheduled Tasks
Similar to asynchronous tasks, this is also implemented in a single process (instead of celery / celerybeat)
Generating API documentation for swagger
This is not an exclusive feature and not a Go feature at all, just a nice feature in the Beego web framework on which the project is built.
If the community shows interest, then I could tell in more detail about the intricacies of implementing some of the functions of the service with specific code examples.
Plans
Plans for the further development of the service largely depend on the wishes of users, so please, if you are interested in the project, leave a comment.
From what I would like to implement:
- Improve interface (service and chrome applications)
- Mobile app
- More options and options, including on the task comment policy
- Opportunity to share write access to tasks for their colleagues
- The ability to download an archive of all attachments at once
PS
I want to note that Greentask can be used not for its intended purpose - to create and discuss tasks. For example, you can:
- make a TODO sheet for yourself, and in fact fulfill the tick of readiness. Or just like a notebook.
- it is also possible to quickly exchange files, while the privacy option will not give access to third parties.
- conduct a survey among a certain circle of people, you will see all the answers, and the commentators only their own. (“Vanya has a birthday today, I as a manager ask you to name the amount you can donate for a gift from s / n”)
- publish news
- create FAQ section
- use WIKI engine c change notification
- create and share photo albums (publicly and privately)
- Download the file from the Internet directly to greentask, and then download from it already. This can be useful when a file is not downloaded / downloaded slowly for some reason directly.
- Everything else that you can think of, by the way, write about it in the comments)