Mastering Cross-Posting: From Facebook Frustrations to Dual Blogging Excellence | May 23 2026, 14:28

I have perfected the cross-posting from Facebook to my two blog sites [which almost no one visits] – beinginamerica.com and raufaliev.com. When a new post is published on Facebook, a mechanism is triggered to translate the post into English, process attached images, generate descriptions for them, create a title based on the text of the post and descriptions of the images, generate tags from the same basis, record the post in turso db – this is a cloud database, free up to certain limits, create embeddings via openai, record in qdrant cloud – this is also a cloud database, but vector-based, and finally, upload images to wordpress via API, and publish the post in English and Russian via API.

All would be well, but of all the APIs, the silliest one is Facebook’s. Firstly, for pages like mine, transitioned to New Experience, it’s almost impossible to use most of this API. Well, it’s possible, but you have to spend a long time proving to Facebook that you really need it, by showing startup documents, demonstrating the application, etc. Obviously, they are reluctant to deal with something that takes content out of their system. In addition, the token that gives access to the latest messages is relatively short-lived (possibly a few weeks), and it needs to be obtained anew through a browser only. So, any automation requires regular attention, otherwise it breaks.

If you mess up and don’t offload the latest posts through this Facebook Graph API in time, they just disappear from the list of recent ones and that’s it, no more API access to them. The only way is to request an archive download from Facebook. This download is also rather silly – it requires a lot of transformations and removing unnecessary stuff. For example, in the file containing posts, which I process, for some reason there are links that I sent in comments without accompanying text. And the comments are in a separate file!

To assign tags, I had to solve a separate challenge. Here’s the thing: there are about 10,000 posts over all time. That’s a big chunk, and you can’t build tags from it because it doesn’t fit into the contextual window of the LLM. But you need to. So, I did this: a script takes random posts from the 10,000 in such a volume that their total size is just below the specified limit in tokens, and at the end of this block, it adds the prompt “generate the most common tags for me, 30 pieces” (I simplify the prompt used). In the end, I ran this 10 times and got 10 sets of tags with 30 pieces each, generated for different slices of the database. That made 300 tags, some of which are complete duplicates, while others are synonyms and closely related in meaning. All this is fed into the LLM, and we get a list of tags and a hierarchy of tags. Now we have a limited set of tags that reflect the 10,000 posts as closely as possible. Turns out, that in almost 20 years on Facebook, my breakdown is as follows:

Tag Posts

==================================================

#Russia 3412

#Thoughts 3146

#Tech 3105

#Culture 2765

#Hobbies 2726

#AI 1603

#Science 1367

#Software 1358

#Travel 1298

#Learning 1138

#Society 1050

#Nature 958

#Education 915

#Business 902

#Art 894

#Programming 889

#Humor 840

#History 807

#Gadgets 750

#Moscow 713

#USA 614

#Cinema 567

#Webdev 493

#Music 476

#Sports 473

#Mindset 443

#Auto 400

#Books 386

and so on. This list includes both tags from the limited list and tags that the LLM appointed to content simply because it didn’t find anything suitable in the limited one.

Tags from the limited list became categories on the site. The rest of the tags + these just became regular wordpress tags.

As for image search. I had two ideas on how to do it. The first – OpenCLIP. It’s pretty straightforward but requires hosting the model somewhere. Easy on my machine, but inconvenient to start it each time, plus I planned to move the migrator to a cheap server on Amazon. It’s also okay to calculate in cloud models, but you have to pay a bit, which is yet another dependency. But the main thing – it works quite well without it. I generate descriptions for images using OpenAI, which is used for translating into English anyway, and then create embeddings using a large model. So far, all search tests are a great success. Especially when there’s text on the image, and it’s a big question whether OpenCLIP would have interpreted it successfully.

In the end:

1) wordpress raufaliev.com – free

2) wordpress beinginamerica.com – free

3) turso db where all posts are stored – free

4) qdrant cloud where embeddings are stored – free

5) openai for translation and image descriptions – not free, but inexpensive (cost $30 for post processing over a year).

I attach two screenshots – how the search by images works, and by texts, as well as the migrator dashboard.

Taste and Protest: Unveiling the Symbols at an Iranian Restaurant | May 03 2026, 19:40

A very tasty Iranian restaurant. Perhaps you didn’t know, but there are two flags of Iran. This one – the historical flag, used before the Islamic revolution of 1979, and today its use inside Iran itself is a political crime. The main difference from the official one is the emblem of the lion and the sun. Therefore, when Iranian protesters in Washington hold demonstrations, it’s interesting to see which flags they carry. If there’s four crescents and a sword in the middle, those are protesters from another camp 😉

Global Flavors Tour: Dining Around the World from A to Z | March 09 2026, 00:27

I’ve come up with an interesting project for 2026. Every time we go out to eat, we’ll choose a restaurant from some exotic country, preparing a bit to understand what you’re ordering. I live near Washington, DC, and here there are restaurants from almost all world cuisines (you can’t try Belarusian draniki and drochena, though). Let’s start with the letter A!

Afghan cuisine. Visited Mazako Afghan Eatery.

We had the Kabul pilaf (Qabuli Palau). The rice here is long-grain, very crumbly and sweetened with caramelized carrots and raisins. With sumac. Delicious! For $14. We took mantu. Relatives of our dumplings, but with an Afghan twist. The main difference is the sauces. They are topped with thick yogurt (chaka) with garlic and dried mint, as well as a meat sauce made from yellow peas. Very tasty chicken kebab (Chicken Kebob). Afghans are masters of marinade. They marinate the chicken in yogurt with lemon and saffron, making it very tender. We took Doogh – a refreshing drink based on yogurt, water, salt, and, theoretically, a large amount of dried mint (though we didn’t find the mint, it might just be hiding) and finely chopped cucumbers. It seems too salty at first, but it’s still okay.

Total pilaf+chicken kebab+doogh+mantu plus 20% tip = $54. And it’s very delicious (and filling).

Actually, yesterday we also visited some fancy Thai restaurant in our town, but it didn’t quite hit the spot, so let’s pretend it didn’t exist.

#ethnicdiningdcmetro

Exploring the Delights of Origin Thai Spa: More Than Just Massage | January 08 2026, 23:48

We bought all this at our Thai massage salon Origin Thai Spa today for $20 — slices of matum tea, Bael Fruit Tea. To the left of it — pandan tea. Also, before buying we tried some hand-made cakes (delicious!).

The salon is staffed by Thai women, all of them elderly, many speak English poorly, but they all know their massage craft very well. We are regular customers there with a membership, and I highly recommend the salon to locals. Thai massage is not for everyone, though, because when done correctly, it is quite painful during the process (but beneficial, and feels like it recharges all your internal batteries).

Arbitrage Adventures: A Glimpse into Venezuela’s Currency Chaos | January 04 2026, 17:10

I first looked at a map of Venezuela around 15 years ago when you could fly there from Russia for a couple hundred dollars. I studied the map but never used it (though perhaps I should have).

At that time, it was the era of wild currency arbitrage, where the difference between the official bolivar rate “from the TV” and the real price on the black market reached astronomical proportions.

The scheme was simply brilliant: within the country, all airlines were required to sell tickets for local currency at the government rate. If an international flight cost a thousand dollars, it was converted into bolivars at the “pretty” official rate. But if you came off the street with a stack of real dollars and exchanged them at a money changer, the sum in bolivars needed to purchase the same ticket cost just a real hundred dollars, and sometimes even fifty.

The real fun began when intermediaries or acquaintances within the country got involved. You could book a ticket online through a local office, pay for it in bolivars through someone in Caracas, and then simply give them cash dollars when meeting, or transfer to a foreign account. The savings were so absurd that people flew business class simply because it was cheaper than lunch at Miami airport.

But cheap tickets were just the tip of the iceberg, because there was also something known as “raspao”. The state gave every traveler the right to buy a couple of thousand dollars at the cheap official rate on a credit card for spending abroad. Eventually, people bought cheap tickets, flew to the nearest islands, cashed in their currency quota, and returned home virtually rich, having sold these dollars on the black market for many times more.

Of course, this bonanza could not last forever and very quickly ended with a loud crash. Airlines quickly realized that their accounts were filled with millions of worthless-bolivars, which the government flatly refused to exchange for real currency. Planes flew half-empty, although all seats were officially bought out for currency quotas, and the government’s debts to carriers grew to billions of dollars, after which global giants simply began to massively leave the market.

But it worked for a while. I don’t remember exactly, somewhere between 2011 and 2014.

How such a breakdown between the official and unofficial rates lasted so long is beyond comprehension. The government could not quickly abolish the official rate because it supported imports of food and medicine. As soon as they acknowledged the real dollar rate, prices in stores would have skyrocketed immediately (which later happened). Flight tickets merely became a “collateral hole” in the system that everyone used while it was possible.