The result is here (modulo filters for tags, users and extra informations related to users):
SELECT
sum(v.score) AS score,
f.id AS id,
f.url AS url,
f.description AS description,
f.author AS author,
f.parent AS parent,
f.root AS root,
f.name AS name,
f.email AS email,
f.email_digest AS email_digest,
f.tags AS tags
FROM
(SELECT
array_agg(t.tag) AS tags,
f.id AS id,
f.url AS url,
f.description AS description,
f.author AS author,
f.parent AS parent,
f.root AS root,
f.name AS name,
f.email AS email,
f.email_digest AS email_digest
FROM
(SELECT
f.id AS id,
f.url AS url,
f.description AS description,
f.author AS author,
f.parent AS parent,
f.root AS root,
u.name AS name,
u.email AS email,
md5(u.email) AS email_digest
FROM
feeds AS f,
users AS u
WHERE
f.author = u.id
AND
(f.parent IS NULL OR f.root IS NULL)
GROUP BY
f.id,
f.url,
f.description,
f.author,
f.parent,
f.root,
u.name,
u.email
ORDER BY
f.id DESC
) AS f
LEFT OUTER JOIN
feeds_tags AS t
ON
f.id = t.id_feed
GROUP BY
f.id,
f.url,
f.description,
f.author,
f.parent,
f.root,
f.name,
f.email,
f.email_digest
ORDER BY
f.id DESC
) AS f
LEFT OUTER JOIN
votes AS v
ON
f.id = v.id_feed
GROUP BY
f.id,
f.url,
f.description,
f.author,
f.parent,
f.root,
f.name,
f.email,
f.email_digest,
f.tags
ORDER BY
f.id DESC
LIMIT 20
OFFSET 0