Here is my 2 cents. This is in no way meant to bring you down. I love the contribution and I want to help you learn and improve, so please takes this the positive way.
The constant class contains global constants. This is not necessarily bad, but there is more info on why to avoid global variables
here. This applies a bit to static variables/classes as well.
This makes no sense. You are saying:
if whatever = true return true if false return false.
why not return the condition instead? Saves 4 lines of code.
And consider using using statements instead, as they tend to look cleaner, and because if an exception is thrown in your code than the object is not disposed. You could also solve this with a finally block after the catch.
More info on the using block
here.
More info on the finally block and disposing
here.
The account class; making everything public and static, and not using properties can be considered bad practice by many. If you want to expose a field publicly, then use a property. And by not making it static you could drag and drop the account class and the login function from the other class in another project and get going right away, without needing to modify much.
More info on auto-properties
here and
here.
In the main class you have a huge function called FetchPosts. This is also bad practice, as if you want to follow OOP strictly, you should segment functionality. Have functions/classes solely for one responsibility (single responsibility principle). This will make the code easier to read and maintain and debug. There is a general, unwritten, rule of thumb; functions cannot be larger than your screen size.
More info on the SOLID principles
here.
You use multiple WebClient instances, and never dispose them. You could have declared one single WebClient in the class so that every function can utilize it (except when threading). And for threading, everytime you download a picture you declare a new WebClient instance and never dispose of it. Consider giving each thread its own WebClient instance that they can re-use.
Deserializing JSON to dynamics, when done quite often, decreases performance as dynamics have an overhead. Consider using a website like
json2csharp that converts the json to classes for you, or use the Special Paste option in Visual Studio to do the same. It will generate a RootObject and all other necessary classes, and you can then deserialize the JSON to the RootObject. If you have a lot of classes (when handling large JSON for example), just group them all together in a single .cs file.
You parse text from the JSON, and then deserialize part of the JSON. Why not deserialize all of it and then get what you need from the class instances it returns?
And finally, booleans by default are false when instantiated (unless you set them to true when instantiating). So "bool flag = false;" can be shortened to "bool flag;".